GID, поскольку Вы нашли, Идентификационный номер группы. Это - просто удобный путь к ОС для выражения (пользователь) группы, связанной с чем-то (процесс, файл, и т.д.); вместо идентификатора потенциально длинной строки это может быть выражено как число фиксированного размера.
В значении полномочий файла четырех восьмеричных цифр (например, 0755), третья цифра указывает полномочия группы в файл. При исключении первой цифры это - вторая цифра, которая указывает полномочия группы. Обратите внимание, что файлы и каталоги рассматривают то же в этом отношении, но что точное значение каждого бита полномочий несколько неинтуитивно в случае каталогов.
Эти два понятия связаны, но служат совсем другим целям.
Что касается Вашего вопроса "даже важно установить те полномочия?"; они всегда устанавливаются на что-то, но так как в большинстве случаев начальная цифра 0 ("ничто специальное"), это имеет тенденцию быть опущенным для краткости. Необходимо ли указать, что некоторое другое значение зависит полностью от шаблона использования для рассматриваемого файла или каталога.
gs
команда, которую Вы выполняете выше, имеет запаздывание $1
который обычно предназначается для передачи параметров командной строки в сценарий. Таким образом, я не уверен, что Вы на самом деле попробовали, но я предполагаю, что Вы пытались поместить ту команду в сценарий, script.sh
:
#!/bin/bash
gs -sOutputFile=output.pdf \
-q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-sColorConversionStrategy=/Mono \
-sColorConversionStrategyForImages=/Mono \
-sProcessColorModel=/DeviceGray \
$1
И выполненный это как это:
$ ./script.sh: 19: ./script.sh: output.pdf: not found
Не уверенный, как Вы устанавливаете этот сценарий, но ему нужно к исполняемому файлу.
$ chmod +x script.sh
Что-то определенно не кажется правильным с тем сценарием все же. Когда я попробовал его, я получил эту ошибку вместо этого:
Неисправимая ошибка: rangecheck в .putdeviceprops
Вместо того сценария я использовал бы этого от вопроса о SU вместо этого.
#!/bin/bash
gs \
-sOutputFile=output.pdf \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
$1
Затем выполните его как это:
$ ./script.bash LeaseContract.pdf
GPL Ghostscript 8.71 (2010-02-10)
Copyright (C) 2010 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 2.
Page 1
Page 2
Я нашел сценарий здесь, который может сделать это. Это требует gs
который Вы, кажется, имеете, но также и pdftk
. Вы не упомянули свое распределение, но в находящихся в Debian системах, необходимо смочь установить его с
sudo apt-get install pdftk
Можно найти RPMs для него здесь.
После того как Вы установили pdftk
, сохраните сценарий как graypdf.sh
и выполненный как так:
./greypdf.sh input.pdf
Это создаст названный файл input-gray.pdf
. Я включаю целый сценарий здесь для предотвращения гнили ссылки:
# convert pdf to grayscale, preserving metadata
# "AFAIK graphicx has no feature for manipulating colorspaces. " http://groups.google.com/group/latexusersgroup/browse_thread/thread/5ebbc3ff9978af05
# "> Is there an easy (or just standard) way with pdflatex to do a > conversion from color to grayscale when a PDF file is generated? No." ... "If you want to convert a multipage document then you better have pdftops from the xpdf suite installed because Ghostscript's pdf to ps doesn't produce nice Postscript." http://osdir.com/ml/tex.pdftex/2008-05/msg00006.html
# "Converting a color EPS to grayscale" - http://en.wikibooks.org/wiki/LaTeX/Importing_Graphics
# "\usepackage[monochrome]{color} .. I don't know of a neat automatic conversion to monochrome (there might be such a thing) although there was something in Tugboat a while back about mapping colors on the fly. I would probably make monochrome versions of the pictures, and name them consistently. Then conditionally load each one" http://newsgroups.derkeiler.com/Archive/Comp/comp.text.tex/2005-08/msg01864.html
# "Here comes optional.sty. By adding \usepackage{optional} ... \opt{color}{\includegraphics[width=0.4\textwidth]{intro/benzoCompounds_color}} \opt{grayscale}{\includegraphics[width=0.4\textwidth]{intro/benzoCompounds}} " - http://chem-bla-ics.blogspot.com/2008/01/my-phd-thesis-in-color-and-grayscale.html
# with gs:
# http://handyfloss.net/2008.09/making-a-pdf-grayscale-with-ghostscript/
# note - this strips metadata! so:
# http://etutorials.org/Linux+systems/pdf+hacks/Chapter+5.+Manipulating+PDF+Files/Hack+64+Get+and+Set+PDF+Metadata/
COLORFILENAME=$1
OVERWRITE=$2
FNAME=${COLORFILENAME%.pdf}
# NOTE: pdftk does not work with logical page numbers / pagination;
# gs kills it as well;
# so check for existence of 'pdfmarks' file in calling dir;
# if there, use it to correct gs logical pagination
# for example, see
# http://askubuntu.com/questions/32048/renumber-pages-of-a-pdf/65894#65894
PDFMARKS=
if [ -e pdfmarks ] ; then
PDFMARKS="pdfmarks"
echo "$PDFMARKS exists, using..."
# convert to gray pdf - this strips metadata!
gs -sOutputFile=$FNAME-gs-gray.pdf -sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "$COLORFILENAME" "$PDFMARKS"
else # not really needed ?!
gs -sOutputFile=$FNAME-gs-gray.pdf -sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "$COLORFILENAME"
fi
# dump metadata from original color pdf
## pdftk $COLORFILENAME dump_data output $FNAME.data.txt
# also: pdfinfo -meta $COLORFILENAME
# grep to avoid BookmarkTitle/Level/PageNumber:
pdftk $COLORFILENAME dump_data output | grep 'Info\|Pdf' > $FNAME.data.txt
# "pdftk can take a plain-text file of these same key/value pairs and update a PDF's Info dictionary to match. Currently, it does not update the PDF's XMP stream."
pdftk $FNAME-gs-gray.pdf update_info $FNAME.data.txt output $FNAME-gray.pdf
# (http://wiki.creativecommons.org/XMP_Implementations : Exempi ... allows reading/writing XMP metadata for various file formats, including PDF ... )
# clean up
rm $FNAME-gs-gray.pdf
rm $FNAME.data.txt
if [ "$OVERWRITE" == "y" ] ; then
echo "Overwriting $COLORFILENAME..."
mv $FNAME-gray.pdf $COLORFILENAME
fi
# BUT NOTE:
# Mixing TEX & PostScript : The GEX Model - http://www.tug.org/TUGboat/Articles/tb21-3/tb68kost.pdf
# VTEX is a (commercial) extended version of TEX, sold by MicroPress, Inc. Free versions of VTEX have recently been made available, that work under OS/2 and Linux. This paper describes GEX, a fast fully-integrated PostScript interpreter which functions as part of the VTEX code-generator. Unless specified otherwise, this article describes the functionality in the free- ware version of the VTEX compiler, as available on CTAN sites in systems/vtex.
# GEX is a graphics counterpart to TEX. .. Since GEX may exercise subtle influence on TEX (load fonts, or change TEX registers), GEX is op- tional in VTEX implementations: the default oper- ation of the program is with GEX off; it is enabled by a command-line switch.
# \includegraphics[width=1.3in, colorspace=grayscale 256]{macaw.jpg}
# http://mail.tug.org/texlive/Contents/live/texmf-dist/doc/generic/FAQ-en/html/FAQ-TeXsystems.html
# A free version of the commercial VTeX extended TeX system is available for use under Linux, which among other things specialises in direct production of PDF from (La)TeX input. Sadly, it���s no longer supported, and the ready-built images are made for use with a rather ancient Linux kernel.
# NOTE: another way to capture metadata; if converting via ghostscript:
# http://compgroups.net/comp.text.pdf/How-to-specify-metadata-using-Ghostscript
# first:
# grep -a 'Keywo' orig.pdf
# /Author(xxx)/Title(ttt)/Subject()/Creator(LaTeX)/Producer(pdfTeX-1.40.12)/Keywords(kkkk)
# then - copy this data in a file prologue.ini:
#/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
#[/Author(xxx)
#/Title(ttt)
#/Subject()
#/Creator(LaTeX with hyperref package + gs w/ prologue)
#/Producer(pdfTeX-1.40.12)
#/Keywords(kkkk)
#/DOCINFO pdfmark
#
# finally, call gs on the orig file,
# asking to process pdfmarks in prologue.ini:
# gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
# -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -dDOPDFMARKS \
# -sOutputFile=out.pdf in.pdf prologue.ini
# then the metadata will be in output too (which is stripped otherwise;
# note bookmarks are preserved, however).
RHEL6 и RHEL5, который оба базовый Ghostscript на 8,70, не смогли использовать формы приведенной выше команды. Предполагая, что скрипт или функция, ожидая файл PDF в качестве первого аргумента «$ 1», следующее должно быть более портативным:
gs \
-sOutputFile="grey_$1" \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Mono \
-sColorConversionStrategyForImages=/Mono \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.3 \
-dNOPAUSE -dBATCH \
"$1"
где выходной файл будет префиксирован с «Grey_».
RHEL6 и 5 могут использовать CompatibilityLevel = 1,4 , который гораздо быстрее, но я стремился к портативности.
У меня также имели некоторые отсканированные цветные PDF и в серого PDF, которые я хотел преобразовать в BW. Я пытался использовать GS
с кодом , перечисленном здесь , и качество изображения хороша с текстом PDF еще там. Тем не менее, этот код GS преобразуется только к серому (как задачу в вопросе) и все еще имеет большой размер файла. Преобразование
дает очень плохие результаты при использовании напрямую.
Я хотел BW PDF с хорошим качеством изображения и небольшим размером файла. Я бы попробовал решение Тердона, но я не мог получить PDFTK
на CentOS 7, используя Yum (во время написания).
Мое решение использует GS
, чтобы извлекать файлы BMP в оттенках серого из PDF, Convert
, чтобы порог эти BMP на BW и сохранить их как файлы TIFF, а затем IMG2PDF ] Чтобы сжать изображения TIFF и объединить их все в один PDF.
Я пытался идти прямо в TIFF из PDF, но качество не то же самое, поэтому я сохраняю каждую страницу BMP. Для одной страницы PDF-файла Convert
делает отличную работу от BMP в PDF. Пример:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
Для нескольких страниц GS
могут объединить несколько PDF-файлов в один, но IMG2PDF
дает меньший размер файла, чем GS. Файлы TIFF должны быть несжаты в качестве входа в IMG2PDF. Имейте в виду большие номера страниц, промежуточные файлы BMP и TIFF имеют тенденцию быть большим по размеру. PDFTK
или joinPDF
было бы лучше, если они могут объединить сжатые файлы PDF из , преобразуют
.
Я представляю, что есть более элегантное решение. Однако мой метод производит результаты с очень хорошим качеством изображения и гораздо меньшим размером файла. Чтобы вернуть текст в BW PDF, снова запустите OCR.
Мой сценарий Shell использует GS, конвертировать и IMG2PDF. Измените параметры (количество страниц, сканирование DPI, пороговое значение%, и т. Д.), Перечисленные в начале по мере необходимости и запуска CHMOD + X./PDF2BW.sh
. Вот полный скрипт (PDF2BWW.SH):
#!/bin/bash
num_pages=12
dpi_res=300
input_pdf_name=color_or_grayscale.pdf
bw_threshold=40%
output_pdf_name=out_bw.pdf
#-------------------------------------------------------------------------
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -q -r$dpi_res \
-sOutputFile=./%d.bmp ./$input_pdf_name
#-------------------------------------------------------------------------
for file_num in `seq 1 $num_pages`
do
convert ./$file_num.bmp -threshold $bw_threshold \
./$file_num.tif
done
#-------------------------------------------------------------------------
input_files=""
for file_num in `seq 1 $num_pages`
do
input_files+="./$file_num.tif "
done
img2pdf -o ./$output_pdf_name --dpi $dpi_res $input_files
#-------------------------------------------------------------------------
# clean up bmp and tif files used in conversion
for file_num in `seq 1 $num_pages`
do
rm ./$file_num.bmp
rm ./$file_num.tif
done
Выше есть много замечательных ответов. Я взял один из ответов выше и добавил к нему человеческий интерфейс. Может быть, кто-то найдет это полезным.
#!/bin/bash
pdf2Gray()
{
if [ -z "$1" ]; then
return 1
else
inputFile="$1"
fi
if [ ! -f "$inputFile" ]; then
echo "File not found"
echo "$inputFile"
return 2
fi
fileType="`file -b --mime-type \"$inputFile\"`"
if [ "$fileType" != 'application/pdf' ]; then
echo "This file is not a pdf"
echo "$inputFile"
return 3
fi
outFile="`basename -s.pdf \"$inputFile\"`-gray.pdf"
if [ -f "$outFile" ]; then
echo -en "File Exists, overwrite it? (Y/n) "
read overWrite
if [ -z "$overWrite" ]; then
overWrite="y"
fi
if [[ "$overWrite" != "y" && "$overWrite" != "Y" ]]; then
return 4
fi
fi
gs \
-q \
-sOutputFile="$outFile" \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
"$inputFile"
echo -en "\033[1;32m"
echo -n "$PWD/$outFile"
echo -e "\033[0m"
}
if [ -z $1 ]; then
echo "usage:"
echo "$0 file1.pdf file2.pdf file3.pdf..."
else
for file in "$@"
do
pdf2Gray "$file"
#echo $? #debug
done
fi
С помощью этого скрипта я получаю надежные результаты очистки отсканированных PDF-файлов до хорошего контраста;
#!/bin/bash
#
# $ sudo apt install poppler-utils img2pdf pdftk imagemagick
#
# Output is still greyscale, but lots of scanner light tone fuzz removed.
#
pdfimages $1 pages
ls./pages*.ppm | xargs -L1 -I {} convert {} -quality 100 -density 400 \
-fill white -fuzz 80% -auto-level -depth 4 +opaque "#000000" {}.jpg
ls -1./pages*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
pdftk pages*.pdf cat output ${1/.pdf/}_bw.pdf
rm pages*
sProcessColorModel
который должен бытьdProcessColorModel
вместо этого. – Sora. 14.12.2017, 12:02