修罗红尘 2019-07-15 18:37 采纳率: 0%
浏览 661

podofo这个库加了水印之后保存的PDF文件大小会从100k到10M呢

您好,为什么用podofo这个库加了水印之后保存的PDF文件大小会比原先的要大几十倍从100k到10M呢,是哪里代码中需要设置一下吗?

void CPODOFOEXEDlg::WatermarkFile(const char* pszInFilename, const char* pszOutFilename, PdfString  strWaterMark, PdfString strWaterMarkCS, PdfString URL,bool bLink)
{
    printf("Running watermark test\n");
    UpdateData(TRUE);
    PdfMemDocument doc(pszInFilename, true);
    PdfPainter     painter;
    PdfPage*       pPage;
    PdfRect        rect;
    CString        strFontSize;
    double dx= 2.0;
    double dy= 2.0;
    const PdfEncoding* pp = PdfEncodingFactory::GlobalIdentityEncodingInstance();
    PdfFont* pFont = doc.CreateFont("Arial Unicode MS", false, new PdfIdentityEncoding(0, 0xffff, true));

    cboFontSize.GetWindowText(strFontSize);

    float fontsize = _wtof(strFontSize);
    pFont->SetFontSize(fontsize);
    double w, h;
    for (int i = 0; i<doc.GetPageCount(); i++)
    {
        pPage = doc.GetPage(i);
        w = pPage->GetPageSize().GetWidth();
        h = pPage->GetPageSize().GetHeight();
        if (!pPage)
        {
            PODOFO_RAISE_ERROR(ePdfError_InvalidHandle);
        }
        painter.SetPage(pPage);
        painter.SetFont(pFont);
        painter.SetColor(0.0, 0.0, 0.0);
        painter.DrawText(3.0, w / 2 - 60.0, strWaterMark);
        painter.DrawText(3.0, w / 2 - 30.0, strWaterMarkCS);
        if (bLink)
        {
            painter.DrawText(dx, dy, PdfString(_T("淘宝链接")));
            painter.SetColor(1.0, 1.0, 1.0);
            painter.DrawText(dx, dy, URL);
        }
        painter.FinishPage();
    }
    painter.DrawText(3.0, w / 2 - 60.0, strWaterMark);
    printf("writing document back\n");
    doc.SetWriteMode(ePdfWriteMode_Compact);
    doc.SetPdfVersion(ePdfVersion_1_7);
    doc.WriteUpdate(pszOutFilename);
}


  • 写回答

3条回答 默认 最新

  • 妙笔花生 2020-03-03 15:19
    关注

    这个要从podofo的运行原理说起。

    podofo中使用了xobject对象。

    可以将xobj对象理解为一个图片,我们drawText其实是在xobj对象上画了一个bmp图片,再将xobj添加到pdf文章中。采用这种方法的话,文章存储空间肯定会变大的。

    因此,不仅是drawText,podofo在drawImage时也会将pdf文档的存储空间变大很多。如果对pdf的文档存储空间不较敏感的话,只从最后形成的pdf文档的效果来看,这种方法并没有什么不好的。

    悲伤的是,podofo似乎并不支持非xobj对象的方法绘制文字 和图像。

    如果答主对pdf加完水印的存储空间很敏感的话,最好还是扎扎实实了解下pdf的格式协议,和podofo的源码,然后修改源码。


    2020年5月7日 更新
    PoDoFo中有一个选项,是选择嵌入字体,这是默认选项。如果不想文件变得这么大,可以修改这个选项,这样pdf的文件大小会变小。缺点是在linux中,会显示异常,因为没有相应的字体库

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog