온라인에서 몇 가지 예를 살펴본 후 iTextSharp를 사용하여 pdfs를 병합하는 코드를 작성했습니다. 하지만 오류가 발생합니다. Merge PDFs iTextSharp
은 { "이 문서는 어떠한 페이지가 없습니다."}
그것은 페이지 = writer.GetImportedPage (리더, X)에서 실패; 그것은 내가 그것을 디버깅 3 페이지가
at iTextSharp.text.pdf.PdfPages.WritePageTree()
at iTextSharp.text.pdf.PdfWriter.Close()
at iTextSharp.text.pdf.PdfCopy.Close()
at iTextSharp.text.Document.Close()
: 여기
는 스택 추적한다. 무엇이 잘못 되었습니까 ??
여기 GetImportedPage에 대한
public static MemoryStream MergePdfs(List<MemoryStream> pdfStreams)
{
//Create output stream
MemoryStream OutStream = new MemoryStream();
Document Document = null;
try
{
//Create Main reader
PdfReader Reader = new PdfReader(pdfStreams.ElementAt(0));
//Create Main Doc
Document = new Document(Reader.GetPageSizeWithRotation(1));
//Create main writer
PdfCopy Writer = new PdfCopy(Document, OutStream);
//Open document for writing
Document.Open();
//Add pages
AddPages(Reader.NumberOfPages, Reader, ref Writer);
//For each additional pdf after first combine them into main document
foreach (MemoryStream PdfStream in pdfStreams.Skip(1))
{
PdfReader Reader2 = new PdfReader(PdfStream);
// Add content
AddPages(Reader2.NumberOfPages, Reader2, ref Writer);
}
}
finally
{
// Step 5: Close the document
if (Document != null)
Document.Close();
foreach (var Strm in pdfStreams)
{
try { if (null != Strm) Strm.Dispose(); } catch { }
}
}
return OutStream;
}
private static void AddPages(int Pages, PdfReader reader, ref PdfCopy writer)
{
PdfImportedPage Page = null;
for (int X = 0; X < Pages; X++)
{
Page = writer.GetImportedPage(reader, X);
writer.AddPage(Page);
}
if (reader.AcroForm != null)
writer.CopyAcroForm(reader);
}
내가 통과 한 MemoryStream은 byte []의 값입니다. 그들이 PDF로 완성되었으므로 완전히 완성되지 않았거나 아무런 문제가 없어야 함을 의미합니다. 정말 먼저 디스크에 쓰지 않고 온라인으로 보았던 다른 예제처럼 다시 병합하여 읽는 것을 피하고 싶습니다. 그래서 메모리 스트림을 사용하여이 사용자 정의 코드를 작성했습니다. – kyleb
GetImportedPage의 페이지 번호는 1부터 시작합니다. – mkl
감사합니다. 답변으로 의견을 게시하여 정확한 것으로 표시해 주시겠습니까? 고마워요. 대답은 이처럼 보이는 함수에서 루프가 필요하다는 것입니다. for (int X = 1; X <페이지 + 1, X ++) { Page = writer.GetImportedPage (reader, X); writer.AddPage (Page); } – kyleb