PDFWriter是一個易于使用的C++創(chuàng)建、修改PDF文檔的庫
1.創(chuàng)建一個PDF文件
#include
#include “PDFWriter.h”
int main()
{
std::cout << “Hello World!\n”;
PDFWriter pdfWriter;
int ret=pdfWriter.StartPDF(“D:\mytestwriterpdf.pdf”, ePDFVersion13);
if (ret == eSuccess)
{
std::cout << “StartPDF Success” << std::endl;
}
ret=pdfWriter.EndPDF();
if (ret == eSuccess)
{
std::cout << “EndPDF Success” << std::endl;
}
}
2.創(chuàng)建一個頁面
#include
#include “PDFWriter.h”
#include “PDFPage.h”
int main()
{
std::cout << “Hello World!\n”;
PDFWriter pdfWriter;
int ret=pdfWriter.StartPDF(“D:\mytestwriterpdf.pdf”, ePDFVersion13);
if (ret == eSuccess)
{
std::cout << “StartPDF Success” << std::endl;
}
PDFPage* page = new PDFPage();
//將"媒體框"設置為A4 //請注意,PDF 頁面具有比媒體框更多的框定義。PDF 定義了裁剪框、出血框、修剪框和藝術框。您可以分別使用 SetCropBox、SetBleedBox、SetTrimBox和SetArtBox來設置這些框。SetCropBoxSetBleedBoxSetTrimBoxSetArtBox
page->SetMediaBox(PDFRectangle(0, 0, 595, 842));
pdfWriter.WritePage(page);
delete page;
ret=pdfWriter.EndPDF();
if (ret == eSuccess)
{
std::cout << “EndPDF Success” << std::endl;
}
}
3.頁面插入圖像
#include
#include “PDFWriter.h”//核心
#include “PDFPage.h”//頁面
#include “PageContentContext.h”//上下文
int main()
{
std::cout << “Hello World!\n”;
PDFWriter pdfWriter;
int ret=pdfWriter.StartPDF(“D:\mytestwriterpdf.pdf”, ePDFVersion13);
if (ret == eSuccess)
{
std::cout << “StartPDF Success” << std::endl;
}
PDFPage* page = new PDFPage();
//將"媒體框"設置為A4 //請注意,PDF 頁面具有比媒體框更多的框定義。PDF 定義了裁剪框、出血框、修剪框和藝術框。您可以分別使用 SetCropBox、SetBleedBox、SetTrimBox和SetArtBox來設置這些框。SetCropBoxSetBleedBoxSetTrimBoxSetArtBox
page->SetMediaBox(PDFRectangle(0, 0, 595, 842));
PageContentContext* cxt = pdfWriter.StartPageContentContext(page);
cxt->DrawImage(10, 10, “D:\sign.png”);
pdfWriter.EndPageContentContext(cxt);
pdfWriter.WritePage(page);
delete page;
ret=pdfWriter.EndPDF();
if (ret == eSuccess)
{
std::cout << "EndPDF Success" << std::endl;
}
}
可以看出來圖像嵌入pdf,尺寸過于大了并未顯示全
4.縮放圖像
#include
#include “PDFWriter.h”//核心
#include “PDFPage.h”//頁面
#include “PageContentContext.h”//上下文
int main()
{
std::cout << “Hello World!\n”;
PDFWriter pdfWriter;
int ret=pdfWriter.StartPDF(“D:\mytestwriterpdf.pdf”, ePDFVersion13);
if (ret == eSuccess)
{
std::cout << “StartPDF Success” << std::endl;
}
else
{
return -1;
}
PDFPage* page = new PDFPage();
//將"媒體框"設置為A4 //請注意,PDF 頁面具有比媒體框更多的框定義。PDF 定義了裁剪框、出血框、修剪框和藝術框。您可以分別使用 SetCropBox、SetBleedBox、SetTrimBox和SetArtBox來設置這些框。SetCropBoxSetBleedBoxSetTrimBoxSetArtBox
page->SetMediaBox(PDFRectangle(0, 0, 595, 842));
PageContentContext* cxt = pdfWriter.StartPageContentContext(page);
//AbstractContentContext::ImageOptions opt;
//opt.transformationMethod = AbstractContentContext::eMatrix;
//opt.matrix[0] = opt.matrix[3] = 0.25;
//opt.matrix[4] = opt.matrix[5] = 100;
//cxt->DrawImage(10, 10, “D:\sign.png”,opt);
AbstractContentContext::ImageOptions opt2;
opt2.transformationMethod = AbstractContentContext::eFit;
opt2.boundingBoxHeight = 100;
opt2.boundingBoxWidth = 100;
opt2.fitProportional = true;
cxt->DrawImage(500,700,“D:\sign.png”,opt2);
pdfWriter.EndPageContentContext(cxt);
pdfWriter.WritePage(page);
delete page;
ret=pdfWriter.EndPDF();
if (ret == eSuccess)
{
std::cout << "EndPDF Success" << std::endl;
}
}
正常使用時要判斷創(chuàng)建是否成功,再繼續(xù)操作
獲取圖像測量值
有時您可能需要圖像測量。對于庫支持的圖像,可以使用 的方法。例如:GetImageDimensionsPDFWriter
DoubleAndDoublePair jpgDimensions = pdfWriter.GetImageDimensions(“soundcloud_logo.jpg”);
jpgDimensions現(xiàn)在將有一對。第一對是寬度,第二是高度。
寫入文字
PDFUsedFont* font = pdfWriter.GetFontForFile(“D:\simsun.ttc”);
AbstractContentContext::TextOptions textOptions(font,14,AbstractContentContext::eGray,0);
cxt->WriteText(10, 700, “Hello World”, textOptions);
輸入中文時,PDF中并未打印出中文。
用notepad打開Cpp文件,是utf8格式?jīng)]錯。但是在調(diào)試時發(fā)現(xiàn)庫解析時識別為兩個字節(jié)的編碼了。
如果以UTF-8,那么中文會以類似3個字節(jié)保存一個中文的形式保存到磁盤,而使用GBK中文是以類似2個字節(jié)保存一個中文的形式保存到磁盤,這叫編碼,也叫做保存編碼。
增加了GBKtoUtf8,成功顯示出來了
5.打開一個已經(jīng)存在的PDF文件,修改他的某一頁
int main()
{
PDFWriter pdfWriter;
pdfWriter.ModifyPDF(“d:\test.pdf”, ePDFVersion13, “”);
PDFModifiedPage modifiedPage(&pdfWriter, 1);
AbstractContentContext* contentContext = modifiedPage.StartContentContext();
AbstractContentContext::ImageOptions opt2;
opt2.transformationMethod = AbstractContentContext::eFit;
opt2.boundingBoxHeight = 100;
opt2.boundingBoxWidth = 100;
opt2.fitProportional = true;
contentContext->DrawImage(100,700,"D:\\sign.png",opt2);
modifiedPage.EndContentContext();
modifiedPage.WritePage();
pdfWriter.EndPDF();
}
以上是功能測試部分,可以看出PDFWriter的功能還是比較全面的,API也比較簡單。文章來源:http://www.zghlxwxcb.cn/news/detail-678766.html
下一篇:用QT編寫一個PDF編輯器
使用QT5編寫PDF編輯器文章來源地址http://www.zghlxwxcb.cn/news/detail-678766.html
到了這里,關于C++編輯修改PDF的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!