Troubleshooting
FontSource, DataSource и PdfPlugin вызывают NotImplementedError при прямом создании
FontSource, DataSource и PdfPlugin являются абстрактными базовыми классами. Каждый объявляет один метод-hook, для которого базовая реализация преднамеренно вызывает NotImplementedError, и ожидает, что конкретный подкласс переопределит его:
| Базовый класс | Абстрактный hook | Используйте один из этих конкретных подклассов вместо |
|---|---|---|
FontSource | get_font_definitions() | FileFontSource, FolderFontSource, MemoryFontSource, SystemFontSource |
DataSource | read_bytes() / write_bytes() | FileDataSource, StreamDataSource, ByteArrayDataSource |
PdfPlugin | process() | Merger, Optimizer, Splitter, TextExtractor |
Если вы видите, что NotImplementedError вызывается из одного из этих трёх базовых классов, решение почти всегда состоит в замене на соответствующий конкретный класс. Для обнаружения шрифтов зарегистрируйте конкретный источник в FontRepository, а не используйте FontSource напрямую:
import aspose_pdf
aspose_pdf.FontRepository.add_source(
aspose_pdf.FolderFontSource("./fonts", scan_subdirectories=True)
)Тот же шаблон применяется к low-code плагинам — создайте подкласс PluginOptions с конкретными входами/выходами DataSource и запустите его через конкретный плагин, а не через сам PdfPlugin:
import aspose_pdf
options = aspose_pdf.MergeOptions()
options.add_input(aspose_pdf.FileDataSource("part1.pdf"))
options.add_input(aspose_pdf.FileDataSource("part2.pdf"))
options.add_output(aspose_pdf.FileDataSource("merged.pdf"))
aspose_pdf.Merger().process(options)Shading.color_at() вызывает NotImplementedError на чистом экземпляре Shading
Shading — базовый класс для выборки цвета в ограниченной области, используемый шаблонами затенения PDF — реализует color_at() и pattern_color_at(), делегируя их внутреннему hook _color_at(), у которого нет тела по умолчанию. При обычном использовании вы никогда не создаёте Shading самостоятельно: собственный PDF-парсер библиотеки создает правильный внутренний подкласс для каждого поддерживаемого ShadingType, когда встречает ресурс затенения, и возвращает None для типов затенения, которые он не распознаёт, вместо того чтобы возвращаться к базовому классу. NotImplementedError доступен только если код приложения напрямую инстанцирует Shading и вызывает color_at() или pattern_color_at(), не создав подкласс с реальной реализацией _color_at().