
Buy the print version or the electronic version

I want to convert a color pdf to black and white pdf in specific mode I want to convert all text in red or green in black (not in gray).
gs -o output.pdf \
-sDEVICE=pdfwrite \
-dBlackText=true \
-dBlackVector=true \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
input.pdf
Token-Oriented Object Notation (TOON) is a compact data format designed to reduce token usage when passing structured information to Large Language Models (LLMs), achieving 30-60% fewer tokens compared to standard JSON.
It simplifies syntax by eliminating unnecessary punctuation and using a more readable structure, making it ideal for applications that frequently interact with LLMs
https://github.com/toon-format/toon
Example:
JSON: (41 Token)
{
"users": [
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "user" }
]
}TOON: (21 token)
users[2]{id,name,role}:
1,Alice,admin
2,Bob,userUser the tool https://toonifyit.com/
What is F-Droid? F-Droid is an installable catalogue of FOSS (Free and Open Source Software) applications for the Android platform. The client makes it easy to browse, install, and keep track of updates on your device.
https://f-droid.org/
Here you can download many apps as:
Use the following command:
>mkvpropedit old_title.mkv --edit info --set "title=new_title"
Step 1 - Installa the following package
sudo apt install imagemagick
Step 2 - Use the following command: convert *.jpeg my_pdf.pdf
The command above might yield an “operation not allowed” error. Fortunately, we
can easily fix it by executing:
sudo sed -i 's/^.*policy.*coder.*none.*PDF.\*//' /etc/ImageMagick-6/policy.xml
or better:
sudo gedit /etc/ImageMagick-6/policy.xml
add or change the row at end of the file (just before </policymap>) with the following:
<policy domain="coder" rights="read | write" pattern="PDF" />
$pattern = '/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/';
if ($file = fopen("a.vcf", "r")) {
while(!feof($file)) {
$line = fgets($file);
if (preg_match($pattern, $line, $matches)) echo $matches[0]."\n";
}
fclose($file);
} sudo apt install mat2
mat2 filename.pdf # you will now end up with a file called filename.cleaned.pdf
mat2 --inplace filename.pdf # this will overwrite original file with the new one, effectively removing the original file
mat2 --show filename.pdf # this will show the metadata that will be removed, if any (similar to dry run)
Step 1: Create a python program called mergePDF.py
import PySimpleGUIQt as sg
import sys
import os
arg = sys.argv[1:]
current_working_directory = os.getcwd() + "/undefined.pdf"
current_working_directory = "/home/max/Scrivania" + "/undefined.pdf"
class Listbox(sg.Listbox):
def dragEnterEvent(self, e):
e.accept()
def dragMoveEvent(self, e):
e.accept()
def dropEvent(self, e):
data = window['LISTBOX'].get_list_values()
items = [str(v).replace("PySide2.QtCore.QUrl('file://", "").replace("')", "") for v in e.mimeData().urls()]
for x in items:
if (x[-4:].upper() != '.PDF'): items.remove(x)
data.extend(items)
window['LISTBOX'].update(data)
window.refresh()
def enable_drop(self):
self.Widget.setAcceptDrops(True)
self.Widget.dragEnterEvent = self.dragEnterEvent
self.Widget.dragMoveEvent = self.dragMoveEvent
self.Widget.dropEvent = self.dropEvent
file_list_column = [
[
Listbox(arg, size=(50, 10), enable_events=True, key='LISTBOX', select_mode="single"),
],
[
sg.Input(default_text=current_working_directory, key='FOLDER')
],
]
image_button_move_column = [
[sg.Button("Up")],
[sg.Button("Down")],
[sg.Button("Delete")],
]
image_button_action_column = [
[
sg.Button("Merge")
],
]
layout = [
[
sg.Column(file_list_column),
sg.VSeperator(),
sg.Column(image_button_move_column),
sg.VSeperator(),
sg.Column(image_button_action_column),
]
]
window = sg.Window("pdfMerge V1.0", layout, finalize=True, resizable=False)
window['LISTBOX'].enable_drop()
def retreive_elem_selected(element):
if element['LISTBOX']:
item = element['LISTBOX'][0]
else: item = ""
return item
def manage_up(item, mylist):
if item:
pos = mylist.index(item)
newpos = pos-1
if newpos>-1:
mylist.insert(
newpos,
mylist.pop(pos)
)
return mylist
def manage_down(item, mylist):
if item:
pos = mylist.index(item)
newpos = pos+1
mylist.insert(
newpos,
mylist.pop(pos)
)
return mylist
def manage_delete(item, mylist):
if item:
mylist.remove(item)
return mylist
def manage_merge(mylist,myfile):
if myfile:
str1 = " ".join(str("\""+x+"\"") for x in mylist)
os.system("qpdf --empty --pages "+ str1 + " -- " + myfile)
else: sg.popup('','The output field is empty')
while True:
event, values = window.read()
item_selected = retreive_elem_selected(values)
mylist = window['LISTBOX'].get_list_values()
if event == sg.WINDOW_CLOSED:
break
if event == 'Merge':
manage_merge(mylist,window['FOLDER'].get())
if event == 'Up':
window['LISTBOX'].update(manage_up(item_selected,mylist))
window['LISTBOX'].set_value(item_selected)
if event == 'Down':
window['LISTBOX'].update(manage_down(item_selected,mylist))
window['LISTBOX'].set_value(item_selected)
if event == 'Delete':
if item_selected:
pos = mylist.index(item_selected)
window['LISTBOX'].update(manage_delete(item_selected,mylist))
mylist = window['LISTBOX'].get_list_values()
if mylist:
if pos < len(mylist):
window['LISTBOX'].set_value(mylist[pos])
else: window['LISTBOX'].set_value(mylist[-1:])
window.close()
Step 2: create a bash file mergePDF.sh to run the mergePDF.py#!/bin/bash
python3 /home/max/batfile/Py/mergePDF.py "$@"
where /home/max/batfile/Py/ is the path where your python file is stored
in my case into /home/max/.local/share/nautilus/scripts
Use as Program or script: c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe
and as arg use -executionpolicy bypass -file "C:\Temp\example.ps1"
where example.ps1 contain your script
https://www.home-assistant.io/
# Example script integration containing script syntax
script:
example_script:
sequence:
# This is written using the Script Syntax
- alias: "Turn on ceiling light"
service: light.turn_on
target:
entity_id: light.ceiling
- alias: "Notify that ceiling light is turned on"
service: notify.notify
data:
message: "Turned on the ceiling light!"
#!/bin/bash
clear
# Example: ./mp4ToMp3.sh ~/Downloads
for entry in "$1"/*.mp4
do
ext="${entry##*.}"
filename="${entry:0:${#entry} - ${#ext}}"
mp3file="${filename}mp3"
echo "$entry ===> $mp3file"
ffmpeg -i "$entry" -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 "$mp3file"
done
#!/bin/bash
unsecAction()
{
retValue=$(zenity --password --title="SECurity")
case $? in
0)
password=$(echo $retValue | cut -d'|' -f1)
~/bin/security $fileSec $password
;;
1)
endmenu
;;
-1)
endmenu
;;
esac
}
secAction()
{
retValue=$(zenity --forms --title="SECurity" --text="Add a security password" --add-password="Password" --add-password="Re-password" )
case $? in
0)
password1=$(echo $retValue | cut -d'|' -f1)
password2=$(echo $retValue | cut -d'|' -f2)
if [ $password1 == $password2 ]
then
~/bin/security $fileSec $password1
else
zenity --info --text="Different Passwords"
secAction
fi
;;
1)
endmenu
;;
-1)
endmenu
;;
esac
}
endmenu() {
echo "Bye bye."
exit 0;
}
mainmenu()
{
declare -i count
count=0
IFS=$(echo -en "\n\b")
read -ra files <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
let count++
done
if [ $count -gt 1 ]
then
zenity --info --text="Select only one file"
else
if [ -f $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ]
then
ext="${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS##*.}"
fileSec=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
if [ $ext == "sec" ]
then
unsecAction
else
secAction
fi
else
zenity --info --text="Select a file. It's a directory"
fi
fi
}
mainmenu
#!/bin/bash
endmenu() {
echo "Bye bye."
exit 0;
}
getDestinationFile()
{
retValue=$(zenity --file-selection --save --file-filter='PDF files (pdf) | *.pdf' --title="Select a PDF file (Destination)")
case $? in
0)
destinationPDFFile=$retValue
;;
esac
}
getOriginFiles()
{
retValue=$(zenity --file-selection --multiple --file-filter='PDF files (pdf) | *.pdf' --title="Select a PDF files to merge")
case $? in
0)
originPDFFiles=$retValue
;;
esac
}
showOriginFiles()
{
declare -i index
index=1
mylistFiles=()
tmpmylistFiles=()
IFS='|'
read -ra files <<< "$originPDFFiles"
for file in "${files[@]}";
do
tmpmylistFiles+=("$file" )
done
readarray -t tmpmylistFiles < <(printf '%s\n' "${tmpmylistFiles[@]}" | sort)
for file in "${tmpmylistFiles[@]}";
do
mylistFiles+=("$index" "$file" )
let index++
done
retValue=$(zenity --list --hide-header --height=400 --width=700 --title='Files To Merge' --column=ID --column=Files "${mylistFiles[@]}" )
echo $retValue
}
mergeFiles()
{
mylistFiles=()
IFS='|'
continua=1
if [ -z "${destinationPDFFile}" ]; then
zenity --info --text="No destination file selected."
continua=0
fi
if [ $continua == 1 ]; then
if [ -z "${originPDFFiles}" ]; then
zenity --info --text="No select files to merge."
continua=0
fi
fi
if [ $continua == 1 ]; then
read -ra files <<< "$originPDFFiles"
for file in "${files[@]}";
do
echo $file
mylistFiles+=("$file" )
let index++
done
readarray -t mylistFiles < <(printf '%s\n' "${mylistFiles[@]}" | sort)
qpdf --empty --pages "${mylistFiles[@]}" -- "${destinationPDFFile}"
fi
}
mainmenu()
{
choice=$(zenity --height=250 --list --hide-header --text "Select action" --ok-label="Select" --cancel-label="Exit" \
--title "Main Menu - Merge file" --radiolist --column="ID" --column="Action" \
1 "File Destination" 2 "Add Files To Merge" 3 "View Files To Merge" 4 "Merge" )
case $choice in
"File Destination")
getDestinationFile
mainmenu
;;
"Add Files To Merge")
getOriginFiles
mainmenu
;;
"View Files To Merge")
showOriginFiles
mainmenu
;;
"Merge")
mergeFiles
mainmenu
;;
esac
}
mainmenu
To resolve in this way:
In the computer where the printer is connected
1) open regedit as administrator
2) create under
KEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Print \
the value
RpcAuthnLevelPrivacyEnabled ( as REG_DWORD (32) and set it to zero )3) Re-start the computer.
For Error: 0x00000709
3. Change RPC Connection Settings