我有两个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内容,但是执行此代码,合并文件内容为空,有人能给我建议吗?
您可能会考虑查看在 fpdf_ppo.h 公共标头中找到的 FPDF_ImportPages api。我认为它可能会完成您想做的大部分繁重工作