如何使用NodeJS在PDF中绘制形状

时间:2015-05-25 16:39:09

标签: node.js pdf draw

我有一些现有的PDF文件,我想要的是通过重叠圆圈或直线来突出显示某些内容。我查看了一些NodeJS PDF库但找不到解决方案(有些库允许从头开始创建PDF并绘制到其中;其他库可以修改现有的PDF,但不支持绘图)。

(Linux / OSX)命令行解决方案(例如使用ImageMagick或其他一些库)也非常好。

编辑我发现使用Image / GraphicsMagick后我实际上可以做某事。比如gm convert -draw "rectangle 20,20 150,100" xxx.pdf[7] xxx2.pdf,但是这个(1)或者在所有页面上绘制,或者只在一个页面上绘制,但是生成的PDF只包含那个页面; (2)输出PDF将包含一个位图图像,我更喜欢带有文本内容的PDF。

编辑我刚发现HummusJS是一个NodeJS库,可以通过声明性JSON对象操作PDF文件。不幸的是,除了scrace文档,笨拙的API(见下文)之外,测试一致并且Unable to create PDF file, make sure that output file target is available全面失败。

完全OT 不确定是什么让人们认为如此完全混淆的API比简单的更好:

var settings = {modifiedFilePath:'./output/BasicJPGImagesTestPageModified.pdf'}
var pdfWriter = hummus.createWriterToModify('./TestMaterials/BasicJPGImagesTest.PDF',settings);
var pageModifier = new hummus.PDFPageModifier(pdfWriter,0);
pageModifier.startContext().getContext().writeText('Test Text', ...
...
var copyingContext = inPDFWriter.createPDFCopyingContextForModifiedFile();

var thirdPageID = copyingContext.getSourceDocumentParser().getPageObjectID(2);
var thirdPageObject = copyingContext.getSourceDocumentParser().parsePage(2).getDictionary().toJSObject();
var objectsContext = inPDFWriter.getObjectsContext();

objectsContext.startModifiedIndirectObject(thirdPageID);
var modifiedPageObject = inPDFWriter.getObjectsContext().startDictionary();

1 个答案:

答案 0 :(得分:0)

与HummusJS的几位帮手,协助您尝试做的事情:

  1. 向现有网页添加内容 - https://github.com/galkahana/HummusJS/wiki/Modification#adding-content-to-existing-pages
  2. 绘制形状 - https://github.com/galkahana/HummusJS/wiki/Show-primitives
  3. 使用两者,这是如何在'centerx,centery'以'radius'和边框宽度1添加圆圈到'myFile.pdf'的第一页。在这种情况下,最终结果将放在'modifiedCopy.pdf'中:

    var pdfWriter = hummus.createWriterToModify(
                                         'myfile.pdf',
                                         {modifiedFilePath:'modifiedCopy.pdf'});
    var pageModifier = new hummus.PDFPageModifier(pdfWriter,0);
    var cxt = pageModifier.startContext().getContext();
    cxt.drawCircle(
                  centerX,
                  centerY,
                  radius,
                  {
                      type:stroke,
                      width:1,
                      color:'black'
                  });
    pageModifier.endContext().writePage();
    pdfWriter.end();
    
    1. 一般文档 - https://github.com/galkahana/HummusJS/wiki
    2. 如果测试失败,请检查正在执行的脚本旁边是否存在“output”文件夹,并且有权写入该文件夹。