以下是分割PDF文档的已知代码:
try
{
FileInfo file = new FileInfo(@"d:\С.pdf");
string name = file.Name.Substring(0, file.Name.LastIndexOf("."));
// we create a reader for a certain document
PdfReader reader = new PdfReader(@"d:\С.pdf");
// we retrieve the total number of pages
int n = reader.NumberOfPages;
int digits = 1 + (n / 10);
System.Console.WriteLine("There are " + n + " pages in the original file.");
Document document;
int pagenumber;
string filename;
for (int i = 0; i < n; i++)
{
pagenumber = i + 1;
filename = pagenumber.ToString();
while (filename.Length < digits) filename = "0" + filename;
filename = "_" + filename + ".pdf";
// step 1: creation of a document-object
document = new Document(reader.GetPageSizeWithRotation(pagenumber));
// step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(name + filename, FileMode.Create));
// step 3: we open the document
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page = writer.GetImportedPage(reader, pagenumber);
int rotation = reader.GetPageRotation(pagenumber);
if (rotation == 90 || rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
// step 5: we close the document
document.Close();
}
}
catch (DocumentException de)
{
System.Console.Error.WriteLine(de.Message);
}
catch (IOException ioe)
{
System.Console.Error.WriteLine(ioe.Message);
}
这是一个分割页面的左上角:
你可以在这里看到(以及在其他角落)意想不到的线条,轮回..我怎样才能避免它们?
答案 0 :(得分:1)
正如之前多次解释过的那样(ITextSharp include all pages from the input file,Itext pdf Merge : Document overflow outside pdf (Text truncated) page and not displaying等),您应该阅读我的书chapter 6的iText in Action(您可以找到C#版本的例子here)。
您正在使用Document
,PdfWriter
和PdfImportedPage
的组合来拆分PDF。请告诉我是谁让你这样做,这样我就可以诅咒激励你的人(因为我之前已经回答过几百次这个问题了,而且我已经厌倦了重复自己)。这些课程不适合这项工作:
您的问题类似于Itext pdf Merge : Document overflow outside pdf (Text truncated) page and not displaying。显然,您尝试拆分的原始文档包含MediaBox和CropBox。查看原始文档时,仅显示CropBox内的内容。当您查看副本时,将显示MediaBox内的内容,并显示“打印机标记”。这些打印机标记显示了在发布环境中需要剪切页面的位置。打印书籍或杂志时,打印内容的页面通常比最终页面大。在组装书籍或杂志之前,额外的内容会被切断。
长话短说:阅读文档,将PdfWriter
替换为PdfCopy
,将AddTemplate()
替换为AddPage()
。