Kiedy próbujesz zagnieździć kilka zakładek o tej samej nazwie, PyPdf2 nie bierze tego pod uwagę. Poniżej samowystarczalnego kodu Pythona, aby sprawdzić, co mam na myśli (trzeba co mam 3 pliki PDF o nazwach a, b i c w folderze roboczym przetestować go out)PyPdf2 zagnieżdżone zakładki o tej samej nazwie nie działające
from PyPDF2 import PdfFileReader, PdfFileMerger
def main():
merger = PdfFileMerger()
pagenum = 0
firstOne = True
for file in ["a.pdf","b.pdf","c.pdf"]:
print("next row")
pdf = PdfFileReader(open(file,"rb"))
merger.append(pdf)
if firstOne:
child = merger.addBookmark(title="blabla",pagenum=1)
firstOne = False
else:
child = merger.addBookmark(title="blabla",pagenum=1, parent=child)
merger.write("test.pdf")
if __name__ == "__main__":
main()
spodziewałbym otrzymany pdf mieć trzy poziomy zagnieżdżonych zakładek
blabla
blabla
blabla
ale zamiast dostać
blabla
blabla
blabla
jakiś sposób, aby upewnić się, że tak się nie stanie?
EDYCJA: Usunąłem zmienną pagenum
, ponieważ chcę, aby te 3 zakładki wskazywały tę samą stronę.
Tak, zamierzałem mieć je wszystkie na tej samej stronie. Dlatego nie zwiększa się "pageNum". Potwierdzasz to, co otrzymałem: wygląda na to, że nie ma sposobu na nieograniczoną liczbę zakładek o tej samej nazwie w PyPdf2. Ale czy jest to funkcja formatu 'pdf' lub biblioteki? – Chapo
Ach, mój zły. Nie mogłem myśleć, dlaczego ktokolwiek chciałby, aby 3 zagnieżdżone zakładki wskazywały tę samą stronę. O ile mogę powiedzieć, jest to błąd w metodzie 'PdfFileMerger.addBookmark()'. Więcej [tutaj] (https://github.com/mstamy2/PyPDF2/issues/40). Zaktualizuję moją odpowiedź, wykonując obejście. – kabdulla
ze swojego linka 'Powodem, dla którego wolałbym używać PdfFileMerger w tej konkretnej aplikacji jest to, że PdfFileWriter wydaje się wymagać, aby wszystkie pliki źródłowe pozostały otwarte dopóki plik wyjściowy nie zostanie zapisany, co powoduje nadmierne zużycie pamięci.". To samo dotyczy mnie w tym przypadku, ale twoje rozwiązanie działa na moje pytanie, ale mimo to go sprawdzę. Dzięki za pomoc. – Chapo