Изменение цвета текста и фона файла PDF

Я хотел бы программно изменить цвет фона и цвет текста в PDF-документах, чтобы их было удобнее читать ночью (вроде как в Adobe Reader: Правка -> Настройки -> Специальные возможности -> Заменить цвета документа).

Есть ли хороший инструмент командной строки или API для Windows, который может это сделать?

Пока я не нашел ни одного. Ничего страшного, если нужно сохранить только что раскрашенный PDF-файл в новый файл.


person Bedford    schedule 29.04.2015    source источник
comment
Если вы занимаетесь программированием, вы можете попробовать что-то вроде этого ответа, который рисует белый прямоугольник в режим наложения Разница на странице.   -  person mkl    schedule 29.04.2015


Ответы (4)


Невозможно сделать это напрямую, без каких-либо (свободных программ или бесплатных) инструментов, о которых я знаю. (Поскольку в общем случае вам придется изменить все цвета страниц PDF, а не только фон, поэтому у вас все еще могут быть некоторые различия в контрасте и цвете.)

То, что вы описываете для Adobe Reader, не меняет сам PDF-файл, оно меняет способ отображения страниц приложением (путем инвертирования цветов или чего-то подобного). PDF-файл остается неизменным во время и после просмотра.

Однако вы можете добиться того же, применив подходящий цветовой профиль ICC к входному PDF-файлу и создав с помощью (самой последней версии) Ghostscript новый выходной PDF-файл из это.

Остается вопрос: какой ЯВЛЯЕТСЯ "подходящим" цветовым профилем ICC для ваших целей??


Некоторое время назад я решил применить сероватый фон к PDF с помощью командной строки pdftk ... background .... Но это, вероятно, сделает некоторые или многие PDF-файлы нечитаемыми. (черный фон наверняка сделает текст нечитаемым, потому что большая часть текста черная и останется такой.)

Чтобы создать страницу PDF (размер A4), которая может служить серым фоном, вы можете использовать Ghostscript: gs -o gray.pdf -sDEVICE=pdfwrite -g5950x8420 -c ".8 setgray 0 0 595 842 rectfill showpage".

Затем примените его к исходному файлу PDF (A4): pdftk original.pdf background gray.pdf output orig-with-backgr.pdf.

Обратите внимание, что это изменит фон только тех страниц (или тех областей страниц), где исходный фон прозрачен, как и большинство текстовых PDF-файлов. Он не работает для страниц или областей с непрозрачным белым или цветным фоном.)


Вы также можете довольно легко добиться постоянного изменения цвета (инвертировать цвета) с помощью ImageMagick. Но это в то же время съест и превратит ваши красивые векторные PDF-файлы в фарш, превратив их в страницы с полными растровыми изображениями: convert nice.pdf -alpha off -invert inverted-colors-ugly-raster.pdf.


Наконец, вот довольно ненадежный способ инвертирования цветов с помощью Ghostscript. Он устанавливает функцию colortransfer для выходного PDF-файла:

gs -o output.pdf     \
   -sDEVICE=pdfwrite \
   -c "{1 exch sub}{1 exch sub}{1 exch sub}{1 exch sub} setcolortransfer" \
   -f input.pdf

Это ненадежно, потому что не каждая программа для просмотра PDF будет соблюдать этот параметр. Я проверял это несколько раз в прошлом...

Эти зрители ПОКАЗАЛИ инвертированные цвета:

  1. Adobe Reader
  2. Adobe Acrobat
  3. gv
  4. Ghostscript/gs
  5. Собственный модуль визуализации PDF в Chrome ('pdfium')

Эти НЕ ПОКАЗЫВАЮТ инвертированные цвета:

  1. Chrome с PDF.js
  2. Firefox с PDF.js
  3. Затура
  4. MuPDF
person Kurt Pfeifle    schedule 29.04.2015
comment
В качестве (возможно, слишком вызывающего) дополнения к вашему ответу на самом деле существуют такие инструменты, как PitStop или pdfToolbox (предупреждение - принадлежность), которые могут применять такую ​​​​кривую передачи, когда она есть (другими словами, вычислять новые цвета с учетом кривой передачи ). Это сделало бы его постоянным и, таким образом, доступным для всех зрителей :) - person David van Driessche; 30.04.2015
comment
@DavidvanDriessche: Спасибо, Дэвид. Конечно, я хотел сказать, что не знал ни о каком «бесплатном» (как в случае свободы) или «бесплатном» (как в бесплатном) инструменте, о котором я знаю ... Я совершенно забыл упомянуть коммерческие утилиты, хотя собирался сделать это, когда писал свой ответ. - person Kurt Pfeifle; 30.04.2015
comment
Это позволяет печатать в черно-белом режиме? - person SalahAdDin; 06.06.2020
comment
вы можете добавить w3m в список средств просмотра, которые отображают инвертированные цвета. - person User12345; 22.10.2020

На тот случай, если OP на самом деле не нужно изменять цвета PDF-документа навсегда, а требуется только средство просмотра PDF, отличное от Acrobat, которое может аналогичным образом измените отображаемые цвета...

MuPDF: MuPDF — это облегченная программа для просмотра PDF-файлов (среди прочего). Он может инвертировать отображаемые цвета простым штрихом i для любого документа, пока он открыт. MuPDF также доступен для Windows (и iOS, и Android, и OSX, и Linux). (Это сделано той же компанией, которая принесла нам Ghostscript).

Скриншоты MuPDF здесь: «нормальный» вид (слева) и «перевернутый» вид (справа)

SumatraPDF: это очень популярная альтернативная программа просмотра PDF для Windows. Его механизм рендеринга PDF основан на MuPDF. Нажатие . в режиме презентации меняет фон на черный. Нажатие w в режиме презентации меняет фон на белый. (Я не думаю, что он также может инвертировать все цвета, но у меня сейчас нет последней версии, чтобы проверить.) При запуске, добавляя -invert-colors в командную строку, он инвертирует цвета для визуализированный документ.

Zathura: легкая программа для просмотра PDF-файлов для Linux и OSX, которой можно управлять с помощью сочетаний клавиш в стиле Vim. ctrl+r изменит цвет отображения любого открытого документа. Фон станет темным, текст станет ярко-серым (однако он не инвертирует, скажем, синий текст в желтый, как это делает MuPDF). Я не уверен, что он доступен и в Windows.

Evince: средство просмотра Gnome PDF, доступное для Linux, OSX и Windows. Он также может инвертировать цвета открытого документа; сочетание клавиш ctrl+i.

XPDF: XPDF — довольно старая программа для просмотра PDF для Unix + Linux (не уверен, что доступна версия для Windows — возможно, в Cygwin). В его командной строке есть параметр запуска: xpdf -rv -papercolor "#333333" file.pdf инвертирует цвета (-rv для обратного видео, -papercolor позволяет изменить фон на что-то отличное от чисто черного [как любой инвертированный белый]) .

person Kurt Pfeifle    schedule 29.04.2015

Поскольку вы просили об API, я добавлю еще одну возможность. На самом деле можно написать надстройку для Adobe Acrobat (должно быть возможно и для Adobe Reader, но с надстройками Reader сложнее), которая будет мешать отображению.

Давным-давно я написал код для Enfocus PitStop, чтобы реализовать режим каркасного рендеринга для PDF-файлов внутри Adobe Acrobat. Нажмите кнопку, и отображение изменится на каркасное, нажмите еще раз, и вы получите обычный вид. Это работает, потому что вы можете (в качестве подключаемого модуля) изменять список отображения (список объектов), нарисованный Acrobat.

Это означает, что для рисования вашего специального режима отображения вы можете создать новый список отображения (или изменить существующий), чтобы он имел прямоугольник в самом конце нужного вам цвета, а затем изменить цвет всех объектов на дисплее. список в соответствии с вашими потребностями.

Это относительно сложно, как есть, что делает его более сложным, так это то, что если вы не хотите, чтобы ваши изменения влияли на файл PDF на диске, вы должны перехватывать множество уведомлений Acrobat и отменять свои изменения. Например, если пользователь пытается сохранить PDF-документ во время просмотра в вашем режиме отображения, вы должны убедиться, что вас об этом предупредили, и отменить изменения во время сохранения. Adobe Acrobat делает это возможным, потому что он отправляет вам уведомления до и после процесса сохранения, но это все еще серьезная работа, чтобы убедиться, что ничего не испорчено.

Но это абсолютно классный и очень гибкий способ реализовать то, что вам нужно. Просто убедитесь, что у вас есть больше пары недель, чтобы реализовать это :)

person David van Driessche    schedule 29.04.2015

  1. Установите нодджс.
  2. npm i -g serve
  3. В директории с pdf запускаем: serve
  4. Откройте http://localhost:5000 в Chrome и нажмите на какой-нибудь файл.
  5. Установите расширение Chrome Dark Reader.
  6. Dark Reader > Toggle localhost:5000

введите здесь описание изображения

person rofrol    schedule 02.04.2018