mirror of
https://github.com/qpdf/qpdf.git
synced 2025-02-03 20:38:25 +00:00
In QPDFJob::handleUnderOverlay flatten nested fo maps
This commit is contained in:
parent
09ddce19e8
commit
e1ca10ccc4
@ -523,7 +523,7 @@ class QPDFJob
|
||||
UnderOverlay& uo,
|
||||
std::map<std::pair<int, size_t>, std::vector<int>> const& pagenos,
|
||||
std::pair<int, size_t> pageno_uo_idx,
|
||||
std::map<int, std::map<size_t, QPDFObjectHandle>>& fo,
|
||||
std::map<std::pair<int, size_t>, QPDFObjectHandle>& fo,
|
||||
std::vector<QPDFPageObjectHelper>&& pages,
|
||||
QPDFPageObjectHelper& dest_page);
|
||||
void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo);
|
||||
|
@ -1888,7 +1888,7 @@ QPDFJob::doUnderOverlayForPage(
|
||||
UnderOverlay& uo,
|
||||
std::map<std::pair<int, size_t>, std::vector<int>> const& pagenos,
|
||||
std::pair<int, size_t> pageno_uo_idx,
|
||||
std::map<int, std::map<size_t, QPDFObjectHandle>>& fo,
|
||||
std::map<std::pair<int, size_t>, QPDFObjectHandle>& fo,
|
||||
std::vector<QPDFPageObjectHelper>&& pages,
|
||||
QPDFPageObjectHelper& dest_page)
|
||||
{
|
||||
@ -1910,9 +1910,12 @@ QPDFJob::doUnderOverlayForPage(
|
||||
v << " " << uo.filename << " " << uo.which << " " << from_page.no << "\n";
|
||||
});
|
||||
auto from_page_ph = pages.at(from_page.idx);
|
||||
if (fo[from_page.no].count(pageno_uo_idx.second) == 0) {
|
||||
fo[from_page.no][pageno_uo_idx.second] =
|
||||
pdf.copyForeignObject(from_page_ph.getFormXObjectForPage());
|
||||
std::pair<int, size_t> fo_index = {from_page.no, pageno_uo_idx.second};
|
||||
auto fo_it = fo.find(fo_index);
|
||||
if (fo_it == fo.end()) {
|
||||
fo_it =
|
||||
fo.insert({fo_index, pdf.copyForeignObject(from_page_ph.getFormXObjectForPage())})
|
||||
.first;
|
||||
}
|
||||
|
||||
// If the same page is overlaid or underlaid multiple times, we'll generate multiple names
|
||||
@ -1920,16 +1923,13 @@ QPDFJob::doUnderOverlayForPage(
|
||||
std::string name = resources.getUniqueResourceName("/Fx", min_suffix);
|
||||
QPDFMatrix cm;
|
||||
std::string new_content = dest_page.placeFormXObject(
|
||||
fo[from_page.no][pageno_uo_idx.second],
|
||||
name,
|
||||
dest_page.getTrimBox().getArrayAsRectangle(),
|
||||
cm);
|
||||
fo_it->second, name, dest_page.getTrimBox().getArrayAsRectangle(), cm);
|
||||
dest_page.copyAnnotations(from_page_ph, cm, dest_afdh, make_afdh(from_page_ph));
|
||||
if (!new_content.empty()) {
|
||||
resources.mergeResources("<< /XObject << >> >>"_qpdf);
|
||||
auto xobject = resources.getKey("/XObject");
|
||||
if (xobject.isDictionary()) {
|
||||
xobject.replaceKey(name, fo[from_page.no][pageno_uo_idx.second]);
|
||||
xobject.replaceKey(name, fo_it->second);
|
||||
}
|
||||
++min_suffix;
|
||||
content += new_content;
|
||||
@ -1992,8 +1992,8 @@ QPDFJob::handleUnderOverlay(QPDF& pdf)
|
||||
};
|
||||
|
||||
std::map<unsigned long long int, std::unique_ptr<QPDFAcroFormDocumentHelper>> afdh;
|
||||
std::map<int, std::map<size_t, QPDFObjectHandle>> underlay_fo;
|
||||
std::map<int, std::map<size_t, QPDFObjectHandle>> overlay_fo;
|
||||
std::map<std::pair<int, size_t>, QPDFObjectHandle> underlay_fo;
|
||||
std::map<std::pair<int, size_t>, QPDFObjectHandle> overlay_fo;
|
||||
QPDFPageDocumentHelper main_pdh(pdf);
|
||||
auto main_pages = main_pdh.getAllPages();
|
||||
size_t main_npages = main_pages.size();
|
||||
|
Loading…
x
Reference in New Issue
Block a user