summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpdfsdk/fpdf_edit_embeddertest.cpp68
-rw-r--r--fpdfsdk/fpdf_edittext.cpp10
-rw-r--r--fpdfsdk/fpdf_view_c_api_test.c1
-rw-r--r--public/fpdf_edit.h17
4 files changed, 95 insertions, 1 deletions
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index 3d2e090a36..0a119b9577 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -931,6 +931,7 @@ TEST_F(FPDFEditEmbeddertest, AddStrokedPaths) {
FPDF_ClosePage(page);
}
+// Tests adding text from standard font using FPDFPageObj_NewTextObj.
TEST_F(FPDFEditEmbeddertest, AddStandardFontText) {
// Start with a blank page
FPDF_PAGE page = FPDFPage_New(CreateNewDocument(), 0, 612, 792);
@@ -1001,6 +1002,73 @@ TEST_F(FPDFEditEmbeddertest, AddStandardFontText) {
FPDF_ClosePage(page);
}
+// Tests adding text from standard font using FPDFText_LoadStandardFont.
+TEST_F(FPDFEditEmbeddertest, AddStandardFontText2) {
+ // Start with a blank page
+ ScopedFPDFPage page(FPDFPage_New(CreateNewDocument(), 0, 612, 792));
+
+ // Load a standard font.
+ FPDF_FONT font = FPDFText_LoadStandardFont(document(), "Helvetica");
+ ASSERT_TRUE(font);
+
+ // Add some text to the page.
+ FPDF_PAGEOBJECT text_object =
+ FPDFPageObj_CreateTextObj(document(), font, 12.0f);
+ EXPECT_TRUE(text_object);
+ std::unique_ptr<unsigned short, pdfium::FreeDeleter> text =
+ GetFPDFWideString(L"I'm at the bottom of the page");
+ EXPECT_TRUE(FPDFText_SetText(text_object, text.get()));
+ FPDFPageObj_Transform(text_object, 1, 0, 0, 1, 20, 20);
+ FPDFPage_InsertObject(page.get(), text_object);
+ ScopedFPDFBitmap page_bitmap = RenderPageWithFlags(page.get(), nullptr, 0);
+#if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
+ const char md5[] = "a4dddc1a3930fa694bbff9789dab4161";
+#else
+ const char md5[] = "eacaa24573b8ce997b3882595f096f00";
+#endif
+ CompareBitmap(page_bitmap.get(), 612, 792, md5);
+}
+
+TEST_F(FPDFEditEmbeddertest, LoadStandardFonts) {
+ CreateNewDocument();
+ const char* standard_font_names[] = {"Arial",
+ "Arial-Bold",
+ "Arial-BoldItalic",
+ "Arial-Italic",
+ "Courier",
+ "Courier-BoldOblique",
+ "Courier-Oblique",
+ "Courier-Bold",
+ "CourierNew",
+ "CourierNew-Bold",
+ "CourierNew-BoldItalic",
+ "CourierNew-Italic",
+ "Helvetica",
+ "Helvetica-Bold",
+ "Helvetica-BoldOblique",
+ "Helvetica-Oblique",
+ "Symbol",
+ "TimesNewRoman",
+ "TimesNewRoman-Bold",
+ "TimesNewRoman-BoldItalic",
+ "TimesNewRoman-Italic",
+ "ZapfDingbats"};
+ for (auto* const font_name : standard_font_names) {
+ FPDF_FONT font = FPDFText_LoadStandardFont(document(), font_name);
+ EXPECT_TRUE(font) << font_name << " should be considered a standard font.";
+ }
+ const char* not_standard_font_names[] = {
+ "Abcdefg", "ArialB", "Arial-Style",
+ "Font Name", "FontArial", "NotAStandardFontName",
+ "TestFontName", "Quack", "Symbol-Italic",
+ "Zapf"};
+ for (auto* const font_name : not_standard_font_names) {
+ FPDF_FONT font = FPDFText_LoadStandardFont(document(), font_name);
+ EXPECT_FALSE(font) << font_name
+ << " should not be considered a standard font.";
+ }
+}
+
TEST_F(FPDFEditEmbeddertest, GraphicsData) {
// New page
ScopedFPDFPage page(FPDFPage_New(CreateNewDocument(), 0, 612, 792));
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index 2ead789204..8186d8d894 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -462,6 +462,16 @@ FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFText_LoadFont(FPDF_DOCUMENT document,
: LoadSimpleFont(pDoc, std::move(pFont), data, size, font_type));
}
+FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
+FPDFText_LoadStandardFont(FPDF_DOCUMENT document, FPDF_BYTESTRING font) {
+ CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
+ if (!pDoc)
+ return nullptr;
+
+ return FPDFFontFromCPDFFont(
+ CPDF_Font::GetStockFont(pDoc, ByteStringView(font)));
+}
+
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
FPDFText_SetFillColor(FPDF_PAGEOBJECT text_object,
unsigned int R,
diff --git a/fpdfsdk/fpdf_view_c_api_test.c b/fpdfsdk/fpdf_view_c_api_test.c
index 34ac5518a3..543a7d1a78 100644
--- a/fpdfsdk/fpdf_view_c_api_test.c
+++ b/fpdfsdk/fpdf_view_c_api_test.c
@@ -196,6 +196,7 @@ int CheckPDFiumCApi() {
CHK(FPDFPath_SetStrokeColor);
CHK(FPDFPath_SetStrokeWidth);
CHK(FPDFText_LoadFont);
+ CHK(FPDFText_LoadStandardFont);
CHK(FPDFText_SetFillColor);
CHK(FPDFText_SetText);
CHK(FPDF_CreateNewDocument);
diff --git a/public/fpdf_edit.h b/public/fpdf_edit.h
index 338b42b588..d3d7c4b277 100644
--- a/public/fpdf_edit.h
+++ b/public/fpdf_edit.h
@@ -1022,7 +1022,7 @@ FPDFText_SetText(FPDF_PAGEOBJECT text_object, FPDF_WIDESTRING text);
// type.
// cid - a boolean specifying if the font is a CID font or not.
//
-// The loaded font can be closed using FPDF_Font_Close.
+// The loaded font can be closed using FPDFFont_Close.
//
// Returns NULL on failure
FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFText_LoadFont(FPDF_DOCUMENT document,
@@ -1031,6 +1031,21 @@ FPDF_EXPORT FPDF_FONT FPDF_CALLCONV FPDFText_LoadFont(FPDF_DOCUMENT document,
int font_type,
FPDF_BOOL cid);
+// Experimental API.
+// Loads one of the standard 14 fonts per PDF spec 1.7 page 416. The preferred
+// way of using font style is using a dash to separate the name from the style,
+// for example 'Helvetica-BoldItalic'.
+//
+// document - handle to the document.
+// font - string containing the font name, without spaces.
+//
+// The loaded font should NOT be closed using FPDFFont_Close. It will be
+// unloaded during the document's destruction.
+//
+// Returns NULL on failure.
+FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
+FPDFText_LoadStandardFont(FPDF_DOCUMENT document, FPDF_BYTESTRING font);
+
// DEPRECATED as of May 2018. This API will be removed in the future. Please
// use FPDFPageObj_SetFillColor instead.
//