We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

Aspose PDF for C++添加水印WatermarkArtifact抛出异常

你好,我想向pdf文件中增加水印,但是auto artifact = MakeObject();行报错,
错误代码:System::ExceptionWrapperAspose::Pdf::Details_FontNotFoundException at memory location 0x014FE370.这个错误怎么去除呢?
测试代码如下:
void GettingWatermarks() {

String _dataDir("C:\\Samples\\");
String inputFileName("watermark.pdf");
String outputFileName("watermark_out.pdf");

auto document = MakeObject<Document>(_dataDir + inputFileName);

auto artifact = MakeObject<WatermarkArtifact>();
auto textState = MakeObject<TextState>();
textState->set_FontSize(72);
textState->set_ForegroundColor(Color::get_Blue());
textState->set_Font(FontRepository::FindFont(u"Courier"));
artifact->SetTextAndState(u"WATERMARK", textState);
artifact->set_ArtifactHorizontalAlignment (HorizontalAlignment::Center);
artifact->set_ArtifactVerticalAlignment (VerticalAlignment::Center);
artifact->set_Rotation(45);
artifact->set_Opacity(0.5);
artifact->set_IsBackground(true);

document->get_Pages()->idx_get(1)->get_Artifacts()->Add(artifact);

document->Save(_dataDir + outputFileName);

}

@Shen1

您的系统中似乎没有安装 MS 字体。请确保指定的存在并正确安装在系统中。另外,请确保在代码中使用正确的字体名称。如果您仍然发现任何问题,请随时告诉我们。

我的系统安装了很多以MS开头的字体,您指的MS字体具体是什么名字,有没有下载链接呢?

@Shen1

您在代码中使用的字体是“Courier”,我们的目的是确保该字体存在于系统中。此外,我们认为该字体的完整名称是“Courier New”。请在验证安装后尝试使用完整名称,如果问题仍然存在,请告诉我们。

@asad.ali
可能我没表达清楚,是 auto artifact = MakeObject();抛出异常,
异常抛出后artifact的值是nullptr,后面的代码还没执行,
我怎么才能让auto artifact = MakeObject()不抛出异常?

我检查了我的系统环境,Courier和Courier New字体都是存在的,
image.png (7.3 KB)

@Shen1

当我们使用 21.11 版本的 API 测试此代码片段时,我们能够在我们的环境中重现该问题。因此,我们的问题跟踪系统中记录了 PDFCPP-1769 票证。我们将进一步调查其详细信息,并及时通知您其更正状态。请耐心等待,给我们一些时间。对此造成的不便,我们表示歉意。