如何使用pdfium库合并pdf文件

问题描述 投票:0回答:1

我有两个pdf文件(1.pdf和2.pdf),我尝试用c++代码使用pdfium库这两个文件,但是合并文件内容不正确,我不知道为什么,这是我的代码:

void gcutMergePDF(const OdUtf8String &mergePath, const OdUtf8StringArray &array)
{
  FPDF_InitLibrary();

  FPDF_DOCUMENT output = FPDF_CreateNewDocument();
  if (!output)
  {
    ELOG("create merge file %s failed", mergePath.c_str());
    return;
  }

  int index = 0;

  for (const auto &item : array)
  {
    ELOG("add file %s to zip", item.c_str());

    FPDF_DOCUMENT pdf = FPDF_LoadDocument(item.c_str(), NULL);
    if (!pdf)
    {
      ELOG("load file %s failed", item.c_str());
      continue;
    }

    int pageCount = FPDF_GetPageCount(pdf);
    for (int i = 0; i < pageCount; ++i)
    {
      FPDF_PAGE page = FPDF_LoadPage(pdf, i);
      if (!page)
      {
        ELOG("load file %s page %d failed", item.c_str(), i);
        continue;
      }

      double width = FPDF_GetPageWidth(page);
      double height = FPDF_GetPageHeight(page);
      FPDF_PAGE newPage = FPDFPage_New(output, index, width, height);
      if (!newPage)
      {
        ELOG("new page %d failed", index);
        continue;
      }

      int count = FPDFPage_CountObjects(page);
      for (int j = 0; j < count; j++)
      {
        FPDF_PAGEOBJECT object = FPDFPage_GetObject(page, j);
        if (!object)
        {
          FPDFPage_InsertObject(newPage, object);
          FPDFPage_GenerateContent(newPage);
        }
      }
      
      FPDF_ClosePage(newPage);

      FPDF_ClosePage(page);

      index++;
    }

    FPDF_CloseDocument(pdf);
  }

  FPDF_FILEWRITE writer; 
  writer.version = 1;
  writer.WriteBlock = blockWriter;
  FPDF_SaveAsCopy(output, &writer, FPDF_NO_INCREMENTAL);

  FPDF_CloseDocument(output);

  FPDF_DestroyLibrary();
}

我希望合并文件包含1.pdf和2.pdf内容,但是执行此代码,合并文件内容为空,有人能给我建议吗?

c++ pdfium
1个回答
0
投票

您可能会考虑查看在 fpdf_ppo.h 公共标头中找到的 FPDF_ImportPages api。我认为它可能会完成您想做的大部分繁重工作

© www.soinside.com 2019 - 2024. All rights reserved.