【问题标题】:iTextSharp - Opening a file and saving PdfDestination and PdfActioniTextSharp - 打开文件并保存 PdfDestination 和 PdfAction
【发布时间】:2011-10-24 09:32:08
【问题描述】:

我正在尝试使用 iTextSharp 做一些相对简单的事情,但我总是觉得它很混乱,如果不寻求帮助就无法弄清楚。

我有一种情况,我使用的第三方产品生成 PDF,但没有设置初始视图设置(缩放、适合宽度等)的选项。

我发现了一些代码可以让我在 iTextSharp 中执行此操作:-

Developer Barn

我无法解决的问题是如何将其应用于已经存在的文件 - 这似乎适用于任何新文件,或者我在 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();
            }
        }

【问题讨论】:

    标签: c# pdf itextsharp


    【解决方案1】:

    我认为 iTextSharp 和 iText 本身都没有编辑功能。我认为要走的路是打开现有文档,创建一个新作者,将旧文档复制到新作者中,同时添加您希望查看的内容,然后覆盖原始文档,如 here 所述。

    【讨论】:

    • 嗨,蒂姆,这是我找到上面代码的地方 - 为我自己的使用稍作更改。感谢您的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多