【问题标题】:How to set initial view properties?如何设置初始视图属性?
【发布时间】:2014-06-23 15:56:33
【问题描述】:

这里我想在acrobat的初始视图标签下设置已经存在的PDF文档属性。

文档选项:

  • 显示 = 书签面板和页面
  • 页面布局 = 连续
  • 放大倍数 = 适合宽度
  • 打开页码 = 1

窗口选项:

  • 显示 = 文档标题

如下图所示:

我尝试了以下代码:

PdfStamper stamper = new PdfStamper(reader, new FileStream(dPDFFile, FileMode.Create));
stamper.AddViewerPreference(PdfName.DISPLAYDOCTITLE, new PdfBoolean(true));

以上代码用于设置文档标题显示。

但以下代码不起作用

对于页面布局:

stamper.AddViewerPreference(PdfName.PAGELAYOUT, new PdfName("OneColumn"));

对于书签面板和页面:

stamper.AddViewerPreference(PdfName. PageMode, new PdfName("UseOutlines"));

所以请指导我什么是满足我要求的正确方法。

【问题讨论】:

    标签: itextsharp itext


    【解决方案1】:

    Show = Bookmarks Panel and PagePage Layout = Continuous 这两项控制在文档/Catalog 中的ViewerPreferences 上一层。您可以通过以下方式获得:

    stamper.Writer.ExtraCatalog
    

    在您的情况下,您正在寻找:

    // Acrobat's Single Page
    stamper.Writer.ExtraCatalog.Put(PdfName.PAGELAYOUT, PdfName.ONECOLUMN);
    // Show bookmarks
    stamper.Writer.ExtraCatalog.Put(PdfName.PAGEMODE, PdfName.USEOUTLINES);
    

    Magnification = Fit WidthOpen to Page number = 1 项也是 /Catalog 的一部分,但位于名为 /OpenAction 的特殊键中。您可以使用以下方法进行设置:

    stamper.Writer.SetOpenAction();
    

    在您的情况下,您正在寻找:

    //Create a destination that fit's width (fit horizontal)
    var D = new PdfDestination(PdfDestination.FITH);
    
    //Create an open action that points to a specific page using this destination
    var OA = PdfAction.GotoLocalPage(1, D, stamper.Writer);
    
    //Set the open action on the writer
    stamper.Writer.SetOpenAction(OA);
    

    【讨论】:

    • 在您的代码中 打开页码 只能工作,否则所有工作都不起作用,并且 PdfDestination.FITH 设置 Magnification = Fit Page 不 适合宽度
    • 这是我的 PS 脚本代码,用于在 PDF [ /PageMode /UseOutlines /View [/FitH -32768]/Page 1 /DOCVIEW pdfmark [ {Catalog} <</ViewerPreferences<</DisplayDocTitle true>>/PageLayout/OneColumn>> /PUT pdfmark 中设置这些设置,但现在我想通过 iTextSharp 在现有 PDF 中使用 c# 执行此操作
    • 这只是使用其他参数创建PdfDestination 对象的问题。例如文档中描述的new PdfDestination(PdfDestination.FITH, -32768)
    • 在哪些文档中我可以得到这个,请提供链接
    • @Bruno Lowagie,它的工作非常好,这个 [ /PageMode /UseOutlines /DOCVIEW pdfmark[ {Catalog} <</ViewerPreferences /Lang(EN) /PageLayout/OneColumn>> /PUT pdfmark 我如何设置这些和所有?
    【解决方案2】:

    我正在添加一个额外的答案来回答上一个答案的 cmets 中的额外问题:

    当您有一个名为 writerPdfWriter 实例时,您可以像这样设置查看器首选项:

    writer.ViewerPreferences = viewerpreference;
    

    在这种情况下,viewerpreference 是一个可以具有以下值之一的值:

    • PdfWriter.PageLayoutSinglePage
    • PdfWriter.PageLayoutOneColumn
    • PdfWriter.PageLayoutTwoColumnLeft
    • PdfWriter.PageLayoutTwoColumnRight
    • PdfWriter.PageLayoutTwoPageLeft
    • PdfWriter.PageLayoutTwoPageRight

    请参阅PageLayoutExample 了解更多信息。

    您还可以更改页面模式,如ViewerPreferencesExample 所示。在这种情况下,不同的值是“OR”-ed:

    • PdfWriter.PageModeFullScreen
    • PdfWriter.PageModeUseThumbs
    • PdfWriter.PageLayoutTwoColumnRight | PdfWriter.PageModeUseThumbs
    • PdfWriter.PageModeFullScreen | PdfWriter.NonFullScreenPageModeUseOutlines
    • PdfWriter.FitWindow | PdfWriter.HideToolbar
    • PdfWriter.HideWindowUI

    目前,您只使用了官方文档中的 PrintPreferences 示例:

    writer.AddViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);
    writer.AddViewerPreference(PdfName.NUMCOPIES, new PdfNumber(3));
    writer.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, PdfBoolean.PDFTRUE); 
    

    但在某些情况下,它只是更容易使用:

    writer.ViewerPreferences = viewerpreference;
    

    注意官方文档是书"iText in Action - Second Edition.",例子是用Java写的,但是你可以找到C#版本here。作品中有一本新书叫《PDF 的基础知识》,但到目前为止只写了 4 章。你可以在这里找到更多信息:http://itextpdf.com/learn

    关于创建PdfDestination 的不同选项的部分已经出现在“PDF 的基础知识”中。

    至于设置语言,是这样的:

    stamper.Writer.ExtraCatalog.Put(PdfName.LANG, new PdfString("EN"));
    

    结果显示在以下屏幕截图中:

    如您所见,现在有一个 Lang 条目,其值为 EN 已添加到目录中。

    【讨论】:

    • 我还有一个问题如何设置阅读选项 Language = English 设置 Language = English 的 PS 脚本是 [ {Catalog} <</Lang(EN)>> /PUT pdfmark
    • 我试过 stamper.Writer.SetLanguage("EN"); 但它不起作用
    • 这种情况需要stamper.Writer.ExtraCatalog.Put(PdfName.LANG, new PdfString("EN"));
    • stamper.Writer.ExtraCatalog.Put(PdfName key,PdfObject value); 无法使用其他选项,例如 PAGEMODEPAGELAYOUT 等等。
    • 我自己试过了,它对我有用。请参阅随附的屏幕截图。也许您使用的旧版 iTextSharp 尚不支持此功能...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多