当前位置: 首页 > 知识库问答 >
问题:

如何将单个pdf页面垂直分割成两半

王彭薄
2023-03-14

我有一个横向的pdf,是一个“页面扩展”。

>

  • 我需要在中间垂直地将页面分成两半。

    我使用此设置将pdf切成两半:此设置将获取页面的左侧部分

    "C:\Program Files (x86)\gs\gs9.10\bin\gswin32c.exe" -o output.pdf 
    -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dSubsetFonts=true -dEmbedAllFonts=true -g 750x1085 -c  
    "<</BeginPage{0.95 0.96 scale 20 22 translate}>> setpagedevice" "<</PageOffset [0 0]>> setpagedevice"  -f input.pdf
    

    上面的命令工作正常。我现在的问题是,我需要设置类似于拆分页面大小的MeDM ox、Cropbox、Bleedbox、Trimbox和artbox。在上面的实例中;它应该是750x1085。

    在GS上运行的正确命令/设置应该是什么,以便Mediabox、Cropbox、Bleedbox、Trimbox和artbox具有相同的大小?

    更新
    这是我试图将PDF文件一分为二的示例:要拆分的PDF文件

    我现在使用/PAGE pdfmark,这是我尝试使用的命令:

         "C:\Program Files (x86)\gs\gs9.10\bin\gswin32c.exe" -o output.pdf -sDEVICE=pdfwrite -dNOPAUSE -dBATCH 
        -dSAFER -dUseCropbox -dSubsetFonts=true -dEmbedAllFonts=true -g7500x10850 
        -c "[/CropBox [0 0 750 1085] /PAGES pdfmark" 
        "[/MediaBox [0 0 750 1085] /PAGES pdfmark" 
        "[/TrimBox [0 0 750 1085] /PAGES pdfmark" 
        "[/BleedBox [0 0 750 1085] /PAGES pdfmark"
        "[/ArtBox [0 0 750 1085] /PAGES pdfmark" 
        "<</BeginPage{0.95 0.96 scale 20 22 translate}>> setpagedevice" 
        "<</PageOffset [0 0]>> setpagedevice" 
        -f input.pdf
    

    我仍然无法将Cropbox、MediaBox、TrimBox、BleedBox和ArtBox设置为相同的大小。

    命令的正确设置应该是什么?

  • 共有1个答案

    陈允晨
    2023-03-14

    转到这里的答案,评论太少了。

    您的基本问题是,原始PDF文件已经包含您试图修改的所有框参数。对于某些类型的输出设备,Ghostscript PDF解释器将通过向设备写入自己版本的pdfmark来保留这些框。因为这发生在你的pdfmark之后,它会取代你的。

    不幸的是,目前还没有任何机制来禁用此功能。此外,由于您使用的是Windows,因此ROM文件系统中内置了资源,因此您无法轻松修改它们。

    所以在这一点上,你真的无能为力。如果您愿意下载源代码并使用PostScript,请告诉我,我想我可以为您提供一个解决方案(您不需要重建GS,但PostScript资源不能单独提供)。

    编辑以包括一些建议的解决方法

    在pdf_main中。附言:

    % Test whether the current output device handles pdfmark.
    /.writepdfmarkdict 1 dict dup /pdfmark //null put readonly def
    /.writepdfmarks {   % - .writepdfmarks <bool>
      currentdevice //.writepdfmarkdict .getdeviceparams
      mark eq { //false } { pop pop //true } ifelse
      systemdict /DOPDFMARKS known or
    } bind def
    

    你可以改变/。写入标记为:

    /.writepdfmarks {   % - .writepdfmarks <bool>
        false
    } bind def
    

    但请注意,输出PDF文件中将停止发出许多其他内容。

    相反,您可以查看pdf_showpage_finish代码:

    /pdfshowpage_finish {   % <pagedict> pdfshowpage_finish -
       save /PDFSave exch store
    ...
    ...
      .writepdfmarks {
    
            % Copy the boxes.
        { /CropBox /BleedBox /TrimBox /ArtBox } {
          2 copy pget {
            % .pdfshowpage_Install transforms the user space do same here with the boxes
            oforce_elems
            2 { Page pdf_cached_PDF2PS_matrix transform 4 2 roll } repeat
            normrect_elems 4 index 5 1 roll fix_empty_rect_elems 4 array astore
            mark 3 1 roll {/PAGE pdfmark} stopped {cleartomark} if
          } {
            pop
          } ifelse
        } forall
    

    您可以修改行{ /CropBox /BleedBox /TrimBox /ArtBox},任何您不想保留的框都可以从该行删除。

    如果您想防止它们中的任何一个覆盖您的规范,请删除从“%复制框”到“%复制注释和链接”的行

    请注意,这仅适用于资源未内置到ROM文件系统的系统,或者资源至少在磁盘上可用,并且使用-I开关指定资源文件的路径的系统。

     类似资料:
    • 问题内容: 我想使用PHP将文本拆分成单个单词。你有什么想法要实现吗? 我的方法: 这是一个好方法吗?您有改进的想法吗? 提前致谢! 问题答案: 使用与任何Unicode标点符号匹配的\ p {P}类和\ s空格类。 这将拆分为一组一个或多个空格字符,但也会吸收周围的所有标点符号。它还在字符串的开头或结尾匹配标点符号。这区分了诸如“不要”和“他说’哎呀!’”之类的情况。

    • 问题内容: 一直在撕我的头发。 如何将多页/多层TIFF图像分成几个单独的图像? 演示图像在这里。 (宁愿使用纯Java(即非本机)解决方案。该解决方案是否依赖于商业库也没关系。) 问题答案: 您可以使用 Java高级映像 库JAI通过使用ImageReader分割多页TIFF: 然后,您可以获得页面数: 并分别阅读页面:

    • 本文向大家介绍Python如何将将模块分割成多个文件,包括了Python如何将将模块分割成多个文件的使用技巧和注意事项,需要的朋友参考一下 问题 你想将一个模块分割成多个文件。但是你不想将分离的文件统一成一个逻辑模块时使已有的代码遭到破坏。 解决方案 程序模块可以通过变成包来分割成多个独立的文件。考虑下下面简单的模块: 假设你想mymodule.py分为两个文件,每个定义的一个类。要做到这一点,首

    • 问题内容: 我有A4页的PDF。出于打印原因,每页包含两个相同的A5页。我要在Java程序中做的是拆分这些页面,并将每个唯一的A5页面零次使用多次作为模板来添加/替换一些文本。完成此操作后,我想将A5页面重新粘贴回A4页面(出于相同的打印原因)。 一个示例:使用第三页第一页和第二页一次。 拆分页面。(并丢弃正确的A5页) 创建第一页的三个副本和第二页的一个副本。 添加/替换文本。 将页面粘合在一起

    • 问题内容: 我想使用NumPy包在Python中垂直连接两个数组: 我想要这样的东西: 我们如何使用函数来做到这一点?我检查了这两个函数,但结果是相同的: 这两个功能都具有此功能: 问题答案: 问题在于两者和都是一维数组,因此只有一个轴可以将它们连接在一起。 相反,您可以使用( v 表示 垂直 ): 另外,是该函数的别名: 还值得注意的是,相同长度的多个数组可以一次堆叠。例如,将有四行。 在幕后,

    • 问题内容: 我正在尝试制作一个小的用户名和密码输入框。 我想问一下,如何垂直对齐div? 我所拥有的是: 如何使ID为Username和Form的div垂直对齐中心?我试着把: 在CSS中用于ID为Login的div,但似乎不起作用。任何帮助,将不胜感激。 问题答案: 现代浏览器中最好的方法是使用flexbox: 某些浏览器将需要供应商前缀。对于不支持Flexbox的较旧的浏览器(例如IE9及更低