Come si aggiunge correttamente la pagina o le pagine da un file PDF su disco esistente a un documento PDF in memoria generato attualmente?Aggiungere un PDF esistente da file a un documento non scritto utilizzando iTextSharp
Abbiamo una classe che produce un documento PDF utilizzando iTextSharp. Funziona bene Al momento aggiungere Termini & condizioni come immagine all'ultima pagina:
this.nettPriceListDocument.NewPage();
this.currentPage++;
Image logo = Image.GetInstance("/inetpub/Applications/Trade/Reps/images/TermsAndConditions.gif");
logo.SetAbsolutePosition(0, 0);
logo.ScaleToFit(this.nettPriceListDocument.PageSize.Width, this.nettPriceListDocument.PageSize.Height);
this.nettPriceListDocument.Add(logo);
Ho questa immagine come documento PDF e preferirei aggiungerlo. Se riesco a capirlo, sarebbe possibile aggiungere altri documenti PDF di cui potremmo aver bisogno per quello che sto generando.
ho provato:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfWriter writer = PdfWriter.GetInstance(this.nettPriceListDocument, this.nettPriceListMemoryStream);
PdfContentByte content = writer.DirectContentUnder;
for (int pageno = 1; pageno < reader.NumberOfPages + 1; pageno++)
{
this.nettPriceListDocument.NewPage();
this.currentPage++;
PdfImportedPage newpage = writer.GetImportedPage(reader, pageno);
content.AddTemplate(newpage, 1f, 1f);
}
che si traduce in un "documento non aprire" eccezione alla writer.DirectContentUnder
Ho anche provato:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfConcatenate concat = new PdfConcatenate(this.nettPriceListMemoryStream);
concat.AddPages(reader);
che si traduce in inserimento di un pagina vuota, di dimensioni strane rispetto alla solita prima pagina del documento.
Ho anche provato:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfCopy copier = new PdfCopy(nettPriceListDocument, nettPriceListMemoryStream);
for (int pageno = 1; pageno < reader.NumberOfPages + 1; pageno++)
{
this.currentPage++;
PdfImportedPage newpage = copier.GetImportedPage(reader, pageno);
copier.AddPage(newpage);
}
copier.Close();
reader.Close();
che si traduce in un NullReferenceException a copier.AddPage(newpage)
.
Ho anche provato:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfCopyFields copier = new PdfCopyFields(nettPriceListMemoryStream);
copier.AddDocument(reader);
Questo si traduce anche in un NullReferenceException a copier.AddDocument(reader)
.
Ho la maggior parte di queste idee da varie domande e risposte StackOverflow. Una cosa che nessuno sembrava affrontare, è l'aggiunta di nuove pagine da un file PDF esistente, a un documento esistente in memoria che non è stato ancora scritto su un file PDF sul disco. Questo documento è già stato aperto e contiene pagine di dati scritte. Se lascio questa procedura Condizioni & Condizioni, o semplicemente scrivo è un'immagine (come in origine), il PDF risultante esce proprio bene.
Per finire come ho iniziato: come faccio ad aggiungere correttamente le pagine da un file PDF su disco esistente a un documento PDF in memoria attualmente generato?
Grazie e apprezzamento in anticipo per le vostre riflessioni su questo. Per favore fatemi sapere se posso fornire ulteriori informazioni.
Grazie @ Jonathan, che cosa se non posso chiamare 'Document.Open()' perché il documento era già aperto e ha avuto un sacco di elementi già aggiunto ad esso? – Troy
@Nevyn Dovresti essere in grado di chiudere il documento e riaprirlo tramite il processo di unione. Tutto quello che devi fare è chiudere il documento e passare le matrici di byte dei tuoi documenti al metodo di fusione che restituirà un memorandum del tuo nuovo documento unito. – Jonathan