Commit 9cb599875bbd1aaf1d2e91d44201ee0fcb79418f
1 parent
930eade6
Improve text objects used in text appearance streams
Showing
10 changed files
with
1514 additions
and
1584 deletions
libqpdf/QPDFFormFieldObjectHelper.cc
| ... | ... | @@ -673,7 +673,6 @@ ValueSetter::writeAppearance() |
| 673 | 673 | // Write the lines centered vertically, highlighting if needed |
| 674 | 674 | size_t nlines = lines.size(); |
| 675 | 675 | double dy = bbox.ury - ((bbox.ury - bbox.lly - (nlines * tfh)) / 2.0); |
| 676 | - write(DA + "\nq\n"); | |
| 677 | 676 | if (highlight) |
| 678 | 677 | { |
| 679 | 678 | write("q\n0.85 0.85 0.85 rg\n" + |
| ... | ... | @@ -684,17 +683,26 @@ ValueSetter::writeAppearance() |
| 684 | 683 | QUtil::double_to_string(tfh) + |
| 685 | 684 | " re f\nQ\n"); |
| 686 | 685 | } |
| 687 | - dy += 0.2 * tf; | |
| 686 | + dy -= tf; | |
| 687 | + write("q\nBT\n" + DA + "\n"); | |
| 688 | 688 | for (size_t i = 0; i < nlines; ++i) |
| 689 | 689 | { |
| 690 | - dy -= tfh; | |
| 691 | - write("BT\n" + | |
| 692 | - QUtil::int_to_string(bbox.llx + dx) + " " + | |
| 693 | - QUtil::double_to_string(bbox.lly + dy) + " Td\n" + | |
| 694 | - QPDFObjectHandle::newString(lines.at(i)).unparse() + | |
| 695 | - " Tj\nET\n"); | |
| 690 | + // We could adjust Tm to translate to the beginning the first | |
| 691 | + // line, set TL to tfh, and use T* for each subsequent line, | |
| 692 | + // but doing this would require extracting any Tm from DA, | |
| 693 | + // which doesn't seem really worth the effort. | |
| 694 | + if (i == 0) | |
| 695 | + { | |
| 696 | + write(QUtil::int_to_string(bbox.llx + dx) + " " + | |
| 697 | + QUtil::double_to_string(bbox.lly + dy) + " Td\n"); | |
| 698 | + } | |
| 699 | + else | |
| 700 | + { | |
| 701 | + write("0 " + QUtil::double_to_string(-tfh) + " Td\n"); | |
| 702 | + } | |
| 703 | + write(QPDFObjectHandle::newString(lines.at(i)).unparse() + " Tj\n"); | |
| 696 | 704 | } |
| 697 | - write("Q\nEMC"); | |
| 705 | + write("ET\nQ\nEMC"); | |
| 698 | 706 | } |
| 699 | 707 | |
| 700 | 708 | class TfFinder: public QPDFObjectHandle::TokenFilter | ... | ... |
qpdf/qtest/qpdf/appearances-1.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-11.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-12.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-2.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-a-more.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-a-more2.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-a.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-b.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-quack.pdf
No preview for this file type