我正在尝试用iTextSharp做一些相对简单的事情,但我总觉得它很混乱,如果不寻求帮助就无法弄明白。
我遇到的情况是我使用的第三方产品会生成PDF,但无法选择设置初始视图设置(缩放,适合宽度等)。
我找到了一些允许我在iTextSharp中执行此操作的代码: -
我无法解决的问题是如何将其应用于已经存在的文件 - 这似乎适用于任何新文件,或者我在iTextSharp中创建的内容,但不是现有的PDF。有没有办法做到这一点,怎么办呢?
非常感谢,
亚当
PS - 已经找到了答案.. StackOverflow不会让我关闭我自己的问题吗?似乎有点愚蠢,但无论如何这样做 -
PdfReader reader = new PdfReader(new FileStream(fileName, FileMode.Open, FileAccess.Read));
Rectangle size = reader.GetPageSizeWithRotation(1);
using (Document document = new Document(size))
{
using (PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Path.Combine(Path.GetDirectoryName(fileName), "Zoom" + Path.GetFileName(fileName)), FileMode.Create, FileAccess.ReadWrite)))
{
//open our document
document.Open();
PdfContentByte cb = writer.DirectContent;
//this creates a new destination to send the action to when the document is opened.
PdfDestination pdfDest = new PdfDestination(PdfDestination.FITH, reader.GetPageSize(1).Top);
//create a new action to send the document to our new destination.
PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, writer);
for (int pageNumber = 1; pageNumber <= reader.NumberOfPages; pageNumber++)
{
//need to change page size for landscape / portrait
document.SetPageSize(reader.GetPageSizeWithRotation(pageNumber));
document.NewPage();
PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
cb.AddTemplate(page, 0, 0);
}
//set the page mode
int PageMode = 0;
PageMode += PdfWriter.PageLayoutOneColumn;
//set the open action for our writer object
writer.SetOpenAction(action);
writer.ViewerPreferences = PageMode;
writer.SetFullCompression();
//finally, close our document
document.Close();
}
}
答案 0 :(得分:3)
我认为在iTextSharp和iText中都没有编辑功能本身。我认为要走的路是打开现有文档,创建一个新的编写器,将旧文档复制到新编写器中,同时添加您想要查看的内容,然后在描述here后覆盖原始文档。