Printing Opactiy Masks
I just sent a brochure to the printers and every image I used an opacity mask on did not print at all. The file was created in illustrator then placed into indesign for the layout. I output a postscript pdf from indesign and sent it off. It came back ok with the exception of not printing those images.
I cant sit here and except that Adobe would create this design tool and not have the ability to actually print it using any process.
Am I doing something wrong?
Export a pdf from InDesign. View separations in Acrobat. Are the images there?
Basically, you first need to determine if the problem lies in how you built the file or if the issue was caused by their output workflow.
Similar Messages
-
Zebra print - clipping mask help
I'm new to Illustrator and am having trouble getting a clipping mask to work the way I want it to. I have a zebra print pattern over the top of some lettering and I want to keep the shape of the lettering while incorporating the zebra print. See my screen shot. What steps do I need to take? I tried Pathfinder and Shape Modes, but they don't come out right.
All I want is to have the lettering incorporate the zebra print without having points outside the letter shape.
AdrianThere are several ways to do this. Two options are: pattern fill or a clipping mask.
Pattern fill
Create a pattern from your zebra pattern by:
1. Setting the pattern artwork in front of a rectangle that has no stroke or fill.
2. Select the pattern AND the rectangle and drag them into the Swatch panel. A "pattern fill" swatch will be added to the panel.
3. Select your text and assign the pattern fill to the text.
This should ideally be a "seamless" pattern. You can read about that in the online help.
NOTE: If your pattern contains only the black portion of the fill (the white area is blank), you can add a second fill attribute to the text by using the Attributes panel:
1. Select the text.
2. Go to the fly-out menu on the Attributes panel and select "new fill".
3. Drag the new fill below the "Characters" in the Attributes panel.
4. Assign any color to it.
Clipping Mask
1. Set your text above the pattern, in the artboard (no need to convert it to outlines).
2. Select text and pattern and choose Menu item: Object/Clipping Mask/Make (or Cmd-7, mac or Ctl-7 pc)
3. Reselect the text and assign it a new color (objects lose their color when converted to a clipping mask, but it can be reassigned).
Hope this helps. -
I am trying to print a large tiled set of images. i can generate the images I want to print using Clipping Masks. However when I save the file, I cannot find a format where only the clipped image is saved. Right now I get the entire artboard, and sometimes more, with the clipped area as the only non-blank portion. I just want an eps file of the clipped portion. I used to be able to do this with CS2, but I can 't find how to do it in CS6.
can anyone help me do this?
Thanks,
DaveMonika,
For your interest, it appears that my problem stemmed from changes in Illustartor.
I have Illustrator CS3 on another computer and when I take a file with a clipping mask and Save As an EPS, it results in a file with only the image. With CS6, it appears that it always saves the full artboard,so you have to reduce the art board first and place your clipped mask on it to get just the image saved.
thanks for all your help.
Dave -
Printing with the setMask on a clip???
I'm trying to print a movie clip that is being masked with a
jpeg that is shiny surface.
printAsBitmap("_root.designStage.designImageMC","bmovie")
or
my_pj.addPage(_level8, {xMin:570, xMax:980, yMin:100,
yMax:500}, {printAsBitmap:true});
both are printing the masks of the movie clips as big boxes,
covering the movie clips. so i'm just getting my shiny jpeg as the
printout, instead of the movieclip that is supposed to be cutting
out the mask to appear as though it's shape is shiny.
_root.designStage.stageMaskFourMC.setMask(_root.designStage.designImageMC);
this is how i'm having the set the mask since i'm loading an
image to a movie clip and then masking it with this in a function
when the load is complete.
any ideas of how to get around this printing the mask
only?then you'll probably need to use the bitmapdata class to
create a bitmap of your masked movieclip and print that
bitmap. -
Using HP Laserjet 5100 as a postscript level 3 device
Hi Smart People,
I'm usually pretty good at figuring this kind of thing out, but this setup has me at the edge of my understanding. If you could help me out, I would be very grateful.
I'm planning to use my 5100 to print offset plates for use on a printing press. I'd like to be able to use Adobe Acrobat Pro to output RIP-processed color separations with trapping. Acrobat says that this is possible with Postcript Level 3 devices, and as far as I know the laserjet 5100 is such a printer.
I'm connecting the printer to the computer using a ethernet cable to the Jetdirect (directly, without using an ethernet switch). I can get the printer printing just fine, but when I try to send a separation job to the printer, I get an error message on the printer display (79.00 PRINTER ERROR). I've tried using both AppleTalk and TCP/IP and get the same results.
I've read in the HP documentation that the parallel port is the only connection that can access all of the printer's capabilities. This has me thinking that connection the printer via the Jetdirect precludes the use of the internal Postscript Level 3 RIP. So my questions are:
Is this true?
If it is true, is it possible to connect the printer via the parallel port to my mac? Maybe with a parallel-to-USB converter cable? Or with an ethernet switch with a parallel port printer server?
I've seen mention on the internet of a set of files from HP called something like "HP Laserjet Monochrome for Mac" that seems to install postscript printing capabilities, but I can't find a functioning link to the file (the file seems to have been deleted from HP's site). Is this what I'm looking for?
Is there anything else I can do (besides buy a -shudder- PC to act as a print server) to get this working?
Thanks a ton,
GaryI think the jetdirect is the correct method to use all the printer features (postscript 3).
Setting up a direct ethernet connection is tricky. You must set a manual IP address on the Mac, even to use appletalk. You should also set an IP address on the jetdirect, then add the printer using IP > jetdirect protocol.
Set computer and printer to be in the same local-reserved subnet - example - 192.168.3.3 for computer and 192.168.3.4 for printer (subnet mask 255.255.255.0 for both). -
[Microsoft][ODBC SQL Server Driver]COUNT field incorrect or syntax error
Hi , i am trying to execute siple SP using JDBC-ODBC Bridge Driver
Here my code :
String dsn="Tritek1";
String user="sa";
String password="imcindia";
Connection con1 = null;
CallableStatement cstmt = null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
con1=DriverManager.getConnection("jdbc:odbc:"+dsn,user,password);
Statement st=con1.createStatement();
st.execute("use dm0102d");
st.execute("setuser 'dm01012'");
cstmt = conObject.connection(" ?=Call dms_ex_get_folder_info(?,?,?)");
cstmt.setString(1,folderType);
cstmt.registerOutParameter(2,java.sql.Types.VARCHAR);
cstmt.registerOutParameter(3,java.sql.Types.VARCHAR); bFlag=cstmt.execute();
Here my SP :
Procedure Name : dms_ex_get_folder_info
Input Parameter(s) : a. folder_type char(20)
Return Parameter(s) : a. Recordset consist edit_mask and folder_type_code from folder_reference table / error
Procedure Type : select
Programmer : Prashanth Kumar M.
Creation Date : 12/20/2005 (20th Dec, 2005)
Tables Accessed : folder_reference
Revised :
Programmer: Date: Description:
Prashanth Kumar M. 12/21/2005 Modified the script as per the approved program specifications.
Test Query:
Declare @edit_mask char(15)
Declare @folder_type_code char(2)
execute dms_ex_get_folder_info 'Policy Folder',@edit_mask output,@folder_type_code output
Print 'Edit Mask : ' + @edit_mask
Print 'Folder Type Code : ' + @folder_type_code
CREATE PROCEDURE dms_ex_get_folder_info
@folder_type char(20),
@edit_mask char(15) output,
@folder_type_code char(2) output
AS
BEGIN
-- Check if the record for @folder_type exists or not.
BEGIN
-- return the record from folder_reference
SELECT
@edit_mask= IsNull(edit_mask,''),
@folder_type_code = IsNull(folder_type_code,'')
FROM folder_reference
WHERE
folder_decode = ltrim(rtrim(@folder_type))
-- return the error message
IF @@error <> 0
BEGIN
RAISERROR 100016 'Error in gettting the record from folder_reference table'
RETURN (@@error)
END
IF @edit_mask = '' AND @folder_type_code = ''
BEGIN
RAISERROR 100017 'No matching details in the folder_reference table'
RETURN (@@error)
END
END
END
GO
Here My Exception:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]COUNT field incorrect or syntax error
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(Unknown Source)
at com.nyl.dms.bl.Folder.createFolder(Folder.java:121)
at com.nyl.dms.bl.Folder.main(Folder.java:223)
Any one can help me to overcome this problem . Thanks in advance.
venkatHere's from one of those 10s of books.
Quoted from JDBC 3.0 by Bernard Van Haecke:
Stored procedures can return multiple result types because they can be composed of SQL statements that return diverse result types: resultsets and update counts (this includes special error codes).
Now this doesn't sound very satisfactory. So I use Sybase since I don't have any other database at the moment, and write a simple stored procedure.
CREATE proc testproc AS
BEGIN
-- My return code
return 7
END
goThen a sample patchy buggy code to play around:
import java.sql.*;
public class ProcTesting {
public static void main(String[] args) {
String connUrl = "jdbc:sybase:Tds:myserver:5150/dbinst";
String userName = "username";
String password = "password";
Connection con = null;
CallableStatement stmt = null;
ResultSet rs = null;
String sql = "{? = call testproc}";
try {
Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance();
con = DriverManager.getConnection(connUrl, userName, password);
stmt = con.prepareCall(sql);
stmt.registerOutParameter(1, Types.INTEGER);
stmt.execute();
System.out.println(stmt.getInt(1));
} catch(Exception e) {
e.printStackTrace();
} finally {
closeAll(con, stmt);
public static void closeAll(Connection con, Statement stmt) {
try {
con.close();
} catch(Exception e) { }
try {
stmt.close();
} catch(Exception e) { }
}Followed by:
javac ProcTesting.java
java -cp "%CLASSPATH%;C:\jarutils\jconn2.jar" ProcTesting
Output:
7
Didn't you know this could be done?
Happy new year, grandpa! -
[python] setting a variable in a loaded module from the main script
Hi,
I have have two python scripts, one generally controlling my desktop wallpaper, the other downloads the APOD picture from the net and sets it as my wallpaper.
At the moment I can get the wallpaper script to load the apod script as a module to use its functionality.
The problem comes when I try to get the module to recognise variables set from the parent script:
I have both scripts using the variable 'verbose' to control how much output is printed, (which can be set from the command line options).
How do I get the 'verbose' variable in the imported module to be the same as the variable set by the script?
I can get it into an imported function using a keyword assignment when called, 'download(verbose=options.verbose)', but this is forgotten when other functions are called.
I have also tried making it a global variable.
I assume it is because I am importing the module and setting the default value before the main script sets its value, but I cant see a way round this.
Any ideas?
Many thanks,
Drewsimplicity:
test1.py
#!/usr/bin/python3
__version__ = 1
from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
import test2
def_msg = 3
def function1(msg=def_msg):
print('1 message level here is {0}' .format(msg))
def function2():
print('2 message level here is {0}' .format(msg))
def function3(msg=def_msg):
msg = def_msg
print('3 message level here is {0}' .format(msg))
def function4():
print('4 message level here is {0}' .format(msg))
def main(msg=def_msg):
print('m message level here is {0}' .format(msg))
function1(msg=msg)
function2()
function3()
function4()
test2.main(msg=msg)
function2()
if __name__ == "__main__":
parser = OptionParser(usage = "usage: %prog [options] command", version="%prog {0}" .format(__version__),
description = "Test script 1.")
parser.set_defaults()
standard = OptionGroup(parser, "Standard Options")
## Standard Options
standard.add_option("-q", "--quiet",
action="store_true", dest="quiet", default=False, #help=SUPPRESS_HELP)
help="only display warnings and errors")
standard.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False, #help=SUPPRESS_HELP)
help="display all output")
standard.add_option("--debug",
action="store_true", dest="debug", default=False, #help=SUPPRESS_HELP)
help="debug mode: detailed output of commands")
standard.add_option("--really-quiet",
action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
#help="only display errors")
standard.add_option("--silent",
action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
#help="don't display any output")
parser.add_option_group(standard)
(options, args) = parser.parse_args()
## message level
if options.debug == True:
msg = 5
elif options.verbose == True:
msg = 4
elif options.quiet == True:
msg = 2
elif options.reallyquiet == True:
msg = 1
elif options.silent == True:
msg = 0
else:
msg = 3
main(msg=msg)
test2.py
#!/usr/bin/python3
__version__ = 1
from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
#from test1 import msg
def_msg = 3
#msg = 3
def function1(msg=def_msg):
print('1 message level here is {0}' .format(msg))
def function2(msg=def_msg):
print('2 message level here is {0}' .format(msg))
def function3():
print('3 message level here is {0}' .format(msg))
def main(msg=def_msg):
#from test1 import msg
#import test1
#msg = test1.msg
print('m message level here is {0}' .format(msg))
function1(msg=msg)
function2()
function3()
if __name__ == "__main__":
parser = OptionParser(usage = "usage: %prog [options] command", version="%prog {0}" .format(__version__),
description = "Test script 2.")
parser.set_defaults()
standard = OptionGroup(parser, "Standard Options")
## Standard Options
standard.add_option("-q", "--quiet",
action="store_true", dest="quiet", default=False, #help=SUPPRESS_HELP)
help="only display warnings and errors")
standard.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False, #help=SUPPRESS_HELP)
help="display all output")
standard.add_option("--debug",
action="store_true", dest="debug", default=False, #help=SUPPRESS_HELP)
help="debug mode: detailed output of commands")
standard.add_option("--really-quiet",
action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
#help="only display errors")
standard.add_option("--silent",
action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
#help="don't display any output")
parser.add_option_group(standard)
(options, args) = parser.parse_args()
## message level
if options.debug == True:
msg = 5
elif options.verbose == True:
msg = 4
elif options.quiet == True:
msg = 2
elif options.reallyquiet == True:
msg = 1
elif options.silent == True:
msg = 0
else:
msg = 3
main(msg=msg)
else:
msg = def_msg
I think I understand why it gives the results it does when run as 'test1.py -v'
I was just wondering if there was an easier way to get the second script to take and remember the variable without having to write variable=value into the function call every single time? However this is the only way I have found so far.
The actual code:
wallpaper.py:
#!/usr/bin/python3
#Filename: wallpaper.py
__version__ = '6.2.0'
import os, sys
from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
#import warnings
import random
#import apod
##### CONFIG #####
## Global Variables
root = '/home/wallpaper'
feh_wallpaper_file = os.path.expanduser('~/.fehbg')
filter_file = os.path.expanduser('~/.config/openbox/wallpaper/mask')
config_path = os.path.expanduser('~/.config/openbox/wallpaper')
list_default = 'default-list'
list_alt = 'alt-list'
menu_default = 'menu-folders'
menu_alt = 'alt-menu'
lockfile='/tmp/wallpaper.lock'
valid_list_list = 'alt-list', 'default-list'
def_msg = 3
##### LOCK v2.2 #####
def LockScript(fun, lock=lockfile, msg=def_msg):
"""Locks the script before starting a function."""
if msg >= 5:
print('Lock :: Locking Script')
from os import O_CREAT, O_EXCL
try:
fd = os.open(lock, O_CREAT+O_EXCL)
if msg >= 5:
print('Lock :: created lock file')
except OSError:
if msg >= 1:
print('Error :: Already running function {0}...' .format(fun))
sys.exit(1)
try:
fun(msg=msg)
finally:
try:
os.remove(lock)
if msg >= 6:
print('Lock :: Removed Lock File')
except:
if msg >= 1:
print('Lock :: Error :: Lockfile missing')
##### CURRENT INFO #####
def get_filter(msg=def_msg):
"""Retrieves the filter."""
f = open(filter_file, 'r')
i = f.read()
f.close()
if msg >= 6:
print('Got Filter :: {0}' .format(i))
return i
def get_info(msg=def_msg):
"""Returns the path and name of the current wallpaper."""
with open(feh_wallpaper_file, 'r') as f:
a = f.read()
b = a[15:-1]
f.close()
name = os.path.basename(b)
try:
import apod
if name == 'apod':
path = os.path.join(apod.archive_folder, apod.thisyear)
w = os.listdir(path)
w.sort()
wnum = len(w) -1
name = w[wnum]
else:
path = os.path.dirname(b)
except:
path = os.path.dirname(b)
if msg >= 5:
print('current wallpaper :: {0} {1}' .format(path, name))
return path, name
def get_next(c, z, msg=def_msg):
"""Gets the next number in the sequence of length z."""
if c == (len(z) - 1):
n = 0
else:
n = c + 1
if msg >= 6:
print('next number is {0}' .format(n))
return n
def get_prev(c, z, msg=def_msg):
"""Gets the previous number in the sequence of length z."""
if c == 0:
p = (len(z) - 1)
else:
p = c - 1
if msg >= 6:
print('previous number is {0}' .format(p))
return p
def current_wallpaper_info(msg=def_msg):
"""Print the details of the current wallpaper."""
name = get_info(msg=msg)[1]
path = get_info(msg=msg)[0]
folder = os.path.basename(path)
mask = get_filter(msg=msg)
try:
import apod
if path.startswith(apod.archive_folder) or name.startswith('APOD'):
title = apod.get_name(fname=name, msg=msg)
print('currently the wallpaper is "{0}", {1}' .format(title, name))
elif not mask == '':
print('currently the wallpaper is {0} from folder {1} using mask {2}' .format(name, folder, mask))
else:
print('currently the wallpaper is {0} from folder {1}' .format(name, folder))
except:
print('currently the wallpaper is {0} from folder {1}' .format(name, folder))
##### SET WALLPAPER FUNCTIONS #####
def set_filter(i=None, msg=def_msg, mask_file=filter_file):
"""Sets the filter."""
if test:
f = open(mask_file, 'r')
else:
f = open(mask_file, 'w')
if i == None:
if msg >= 5:
print('clearing filter')
if test:
print('exec :: Clear filter')
else:
f.write('')
else:
if msg >= 4:
print('Setting filter as "{0}"' .format(i))
if test:
print('exec :: Writing filter as :: "{0}"' .format(i))
else:
f.write(i)
f.close()
def set_wallpaper(name, path_in=get_info()[0], msg=def_msg):
"""Set the wallpaper."""
spath = path_in.split(':')
path = spath[0]
try:
mask = spath[1]
set_filter(mask, msg=msg)
except:
pass
full = os.path.join(path, name)
if msg >= 4:
print("setting {0} as wallpaper" .format(name))
if test:
print("exec :: feh --bg-scale {0}" .format(full))
else:
os.system("feh --bg-scale {0}" .format(full))
#def set_default(d=default_file):
# """Sets the default walllpaper."""
# set_wallpaper(d[1], d[0])
def set_wallpaper_last(msg=def_msg):
"""Set the wallpaper as the last image."""
## alternativly use "eval `cat ~/.fehbg`"
full = os.path.join(get_info()[0], get_info()[1])
if msg >= 4:
print("setting {0} as wallpaper" .format(full))
if test:
print("exec :: feh --bg-scale {0}" .format(full))
else:
os.system("feh --bg-scale {0}" .format(full))
def change_folder(folder0, mask=None, msg=def_msg):
"""Change Wallpaper folder (optional filter) relative from root dir."""
folder_split = folder0.split(':')
folder = folder_split[0]
path = os.path.join(root, folder)
if not os.path.exists(path): # Path does not exist
if msg >= 1:
print('Fatal Error :: path does not exist')
print('avaliable folders are {0}' .format(avaliable_folders()))
sys.exit()
if msg >= 4:
print('changing folder to {0}' .format(folder))
f1 = os.listdir(path)
try:
if folder_split[1]:
mask = folder_split[1]
f2 = []
for i in f1:
if i.find(mask) > -1:
f2.append(i)
f = f2
if len(f) == 0:
if msg >= 2:
print('Warning :: invalid filter')
raise
set_filter(mask, msg=msg)
else: # print('null mask')
if msg >= 2:
print('Warning :: null filter')
raise
except:
if msg >= 5:
print('No filter used, clearing')
set_filter(msg=msg)
f = f1
if len(f) == 0:
if msg >= 1:
print('Fatal Error :: no files in path')
sys.exit()
r = random.randrange(0,len(f))
if msg >= 5:
print('chosing random number:: {0}' .format(r))
set_wallpaper(f[r], path, msg=msg)
def avaliable_folders(r=root, msg=def_msg):
"""Returns a list of avaliable folders in the root wallpaper directory."""
allfolders = os.listdir(r)
folders = []
for f in allfolders:
if not f.startswith("."):
folders.append(f)
return folders
##### DEFAULT / ALT SEQUENCE LISTS #####
def strip_opt(p):
#q1 = p.replace(' ','')
#q2 = q1.replace('\t','')
#q3 = q2.replace('\n','')
q = p.replace(' ','').replace('\t','').replace('\n','')
return q
def check_list(l, path=config_path, dl=list_default, al=list_alt, msg=def_msg, returnF=False):
"""Checks to see (and returns) valid path to list."""
if l == 'default' or l == 'def' or l == None :
if msg >= 4:
print('using default list')
return os.path.join(path, dl)
elif l == 'alt':
if msg >= 4:
print('using alternative list')
return os.path.join(path, al)
else:
try:
if not os.path.exists(os.path.join(path, l)):
if msg >= 1:
print('Error :: list does not exist')
raise
elif not os.path.isfile(os.path.join(path, l)):
if msg >= 1:
print('Error :: list not a file')
raise
else:
try:
c = valid_list_list.index(l)
if msg >= 6:
print('list name has been validated')
except:
if msg >= 2:
print('Warnimg :: list used has not been vaildated by script')
print('Warnimg :: if valid; add to the list of valid lists')
if msg >= 5:
print('path exists')
return os.path.join(path, l)
except:
if returnF == True:
return False
else:
if msg >= 2:
print('Warning :: using default list')
return os.path.join(config_path, dl)
def get_seq(msg=def_msg):
"""Returns the sequence of current wallpaper and curr position."""
mask = get_filter(msg=msg)
path = get_info(msg=msg)[0]
name = get_info(msg=msg)[1]
list1 = os.listdir(path)
if mask == '':
list0 = list1
else:
list2 = []
for i in list1:
if i.find(mask) > -1:
list2.append(i)
try: # check the filter is currently being used
num = list2.index(name)
#print('wallpaper in filtered list')
list0 = list2
except: # filter is out of date
if msg >= 5:
print('wallpaper not in filtered list... clearing')
list0 = list1
set_filter(msg=msg) # clear filter
list0.sort()
try: # needed if current wallpaper has been removed
num = list0.index(name)
if msg >= 5:
print('current wallpaper info ::')
print('name : {0}, number : {1}' .format(name, num))
return num, list0
except:
if msg >= 1:
print('Error :: get_seq :: Current wallpaper file missing :: name : {0}' .format(name))
return 0, list0
def list_sequence(com='next', seq=None, msg=def_msg):
cname = get_info(msg=msg)[1]
if seq == None:
list_dir = get_info(msg=msg)[0]
list_file = get_seq(msg=msg)[1]
if msg >= 4:
print('Changing wallpaper in sequence using current folder:mask')
else:
## Build a list.
a = check_list(seq, msg=msg)
list_dir = []
list_file = []
with open(a, 'r') as f:
for line in f:
i = line.split(',')
list_dir.append(os.path.join(root, strip_opt(i[0])))
list_file.append(strip_opt(i[1]))
set_filter(msg=msg) # flush mask if using a list
if msg >= 4:
print('Changing wallpaper in sequence using list file')
try:
c = list_file.index(cname)
if msg >= 5:
print('found current wallpaper in list at position {0}' .format(c))
if com == 'random':
n = random.randrange(0, len(list_file))
if msg >= 4:
print('setting random wallpaper from sequence')
elif com == 'prev':
n = get_prev(c, list_file)
if msg >= 4:
print('setting previous wallpaper in sequence')
elif com == 'next':
n = get_next(c, list_file)
if msg >= 4:
print('setting next wallpaper in sequence')
elif com == 'first':
if msg >= 4:
print('setting first wallpaper in sequence')
n = 0
else:
if msg >= 2:
print('Warning :: Unknown commmand')
n = 0
except:
if msg >= 4:
print('Warning :: not found current wallpaper in list / folder')
print('using first file in list / folder')
n = 0
if seq == None:
set_wallpaper(list_file[n], list_dir, msg=msg)
else:
set_wallpaper(list_file[n], list_dir[n], msg=msg)
def toggle_list(d='default', com='toggle', msg=def_msg):
"""Removes the current file from the list."""
a = check_list(d, msg=msg)
file_list = []
mod_file = []
cname = get_info(msg=msg)[1]
cpath = get_info(msg=msg)[0]
if os.path.dirname(cpath) == root:
cdir = os.path.basename(cpath)
elif os.path.dirname(os.path.dirname(cpath)) == root:
cdir = os.path.join(os.path.basename(os.path.dirname(cpath)), os.path.basename(cpath))
else:
print('error')
sys.exit()
cmask = get_filter(msg=msg)
if cmask == '':
cdmask = cdir
else:
cdmask = '{0}:{1}' .format(cdir, cmask)
in_list = False
with open(a) as f:
for line in f:
i = line.split(',')
if cname == strip_opt(i[1]):
if msg >= 6:
print('file in list')
in_list = True
else:
if msg >= 6:
print('file not in list')
file_list.append(strip_opt(i[1]))
mod_file.append('{0} , {1} \n' .format(strip_opt(i[0]), strip_opt(i[1])))
if in_list and com != 'rmfile' :
if msg >= 3:
print('Removed file from list')
if test:
for j in mod_file:
print('writing newline: {0}' .format(j))
else:
with open(a, 'w') as newf:
for j in mod_file:
newf.writelines(j)
elif not in_list and com != 'addfile':
mod_file.append('{0} , {1} \n' .format(cdmask, cname))
if msg >= 3:
print('Added wallpaper to list')
if test:
for j in mod_file:
print('writing newline: {0}' .format(j))
else:
with open(a, 'w') as newf:
for j in mod_file:
newf.writelines(j)
else:
if com == 'addfile':
if msg >= 2:
print('Warning :: File already in list')
elif com == 'rmfile':
if msg >= 2:
print('Warning :: File not in list')
else:
if msg >= 1:
print('Error :: UNKNOWN :: TOG LIST FUNCTION')
##### OPENBOX MENU #####
def gen_obmenu():
import oblib
for i in avaliable_folders():
oblib.item(i, 'wallpaper.py --silent --change {0}' .format(i))
def gen_obmenu_simple(name=None, i=None):
import oblib
if name == None:
oblib.pipe_start()
else:
oblib.menu_start(name, i)
oblib.item('Deafult', 'wallpaper.py --silent --default')
oblib.sep()
oblib.item('APOD', 'wallpaper.py --silent --apod')
oblib.item('APOD Save', 'wallpaper.py --silent --apod-save')
oblib.item('Random', 'wallpaper.py --silent --random')
if name == None:
oblib.pipe_end()
else:
oblib.menu_end()
def gen_obmenu_standard():
import oblib
oblib.pipe_start()
oblib.item('Deafult', 'wallpaper.py --silent --default')
oblib.sep()
oblib.item('APOD', 'wallpaper.py --silent --apod')
oblib.item('APOD Save', 'wallpaper.py --silent --apod-save')
oblib.sep()
oblib.menu_start('Change Set')
obmenu_change_set()
oblib.menu_end()
apod.obmenu_archive_folders(t='menu')
oblib.item('Toggle List', 'wallpaper.py --silent --toggle')
oblib.item('Random', 'wallpaper.py --silent --random')
oblib.pipe_end()
def gen_obmenu_alt():
import oblib
oblib.pipe_start()
oblib.sep('Alt Menu')
obmenu_change_set('alt')
oblib.pipe_end()
def obmenu_change_set(a='default', dl=menu_default, al=menu_alt):
import oblib
menu = check_list(a, dl=dl, al=al, returnF=True)
if menu != False:
f = open(menu, 'r')
for line in f:
i = line.split(',')
oblib.item(strip_opt(i[0]), 'wallpaper.py --change {0}' .format(strip_opt(i[1])))
f.close()
else:
for i in avaliable_folders():
oblib.item(i, 'wallpaper.py --change {0}' .format(i))
##### TEST FUNCTIONS #####
def parser_options():
print('Options are: {0}' .format(options))
print('Args are : {0}' .format(args))
print('Command is : {0}' .format(command))
def meta_info():
if options.meta_source == None:
print('No source specifieed')
else:
print('Script launched from source :: {0}' .format(options.meta_source))
def test_module():
#pass
#print(check_list(args[0]))
new_mod()
def new_mod():
#if path == None:
# print('No path specified, using pwd')
# path = os.curdir
#need_new_name = False
#print('Checking filenames in {0}' .format(path))
#for name in os.listdir(path):
# if name.find(" ") > -1:
# print("Warning :: > < in {0}" .format(name))
# need_new_name = True
# if name.find("'") > -1:
# print("Warning :: >'< in {0}" .format(name))
# need_new_name = True
# if name.find("&") > -1:
# print("Warning :: >&< in {0}" .format(name))
# need_new_name = True
# if name.find('"') > -1:
# print('Warning :: >"< in {0}' .format(name))
# need_new_name = True
# if need_new_name:
# new_name = name.replace('"', "").replace(" ", "_").replace("&", "and").replace("'", "")
# if re_name:
# print("Renaming to new name:: {0}" .format(new_name))
# os.rename(os.path.join(path, name), os.path.join(path, new_name))
# else:
# print("Suggested new name:: {0}" .format(new_name))
# need_new_name = False
pass
##### SANITISE WALLPAPER FILE NAMES #####
def sane_names(path=None, re_name=False, msg=def_msg):
"""Check file names in a path."""
if path == None:
print('No path specified, using pwd')
path = os.curdir
need_new_name = False
print('Checking filenames in {0}' .format(path))
for name in os.listdir(path):
if name.find(" ") > -1:
print("Warning :: > < in {0}" .format(name))
need_new_name = True
if name.find("'") > -1:
print("Warning :: >'< in {0}" .format(name))
need_new_name = True
if name.find("&") > -1:
print("Warning :: >&< in {0}" .format(name))
need_new_name = True
if name.find('"') > -1:
print('Warning :: >"< in {0}' .format(name))
need_new_name = True
if need_new_name:
new_name = name.replace('"', "").replace(" ", "_").replace("&", "and").replace("'", "")
if re_name:
print("Renaming to new name:: {0}" .format(new_name))
os.rename(os.path.join(path, name), os.path.join(path, new_name))
else:
print("Suggested new name:: {0}" .format(new_name))
need_new_name = False
print('File name check complete')
##### MAIN FUNCTION #####
def Main(msg=def_msg):
"""Chooses which command to run."""
if options.direction != None: # a dircetion has been set
list_sequence(com=options.direction, seq=options.whichlist, msg=msg)
elif command == 'last':
set_wallpaper_last(msg=msg)
elif command == 'info':
current_wallpaper_info(msg=msg)
## change folder
elif options.newfolder != None:
change_folder(options.newfolder, msg=msg)
## apod
elif command == 'apod':
#apod.download2(msg=msg, test=test)
try:
import apod
apod.download2(msg=msg, test=test)
except:
pass
elif command == 'apod-save':
#apod.apod_save('today', msg=msg, test=test)
try:
import apod
apod.apod_save('today', msg=msg, test=test)
except:
pass
## list management
elif options.toggle != None:
toggle_list(options.whichlist, com=options.toggle, msg=msg)
## openbox menu
elif command == 'obmenu':
gen_obmenu_standard()
elif command == 'obmenu-simple':
gen_obmenu_simple()
elif command == 'obmenu-alt':
gen_obmenu_alt()
## filename check
elif command == 'sane-name':
sane_names(path=options.sane_path, re_name=options.sane_rename, msg=msg)
## cycle
elif command == 'cycle':
print('ERROR :: function not implemented')
elif command == 'testmod':
test_module()
elif options.whichlist != None: # a list but no direction specified
list_sequence(seq=options.whichlist, msg=msg)
elif command == "TestNone":
print('Test mode null op[tion')
elif command == None: ## no command specified
pass
else:
print('Error :: no valid command found')
##### SCRIPT STARTUP #####
if __name__ == "__main__":
# def parse_change(option, opt_str, value, parser):
# parser.values.command = 'change'
# parser.values.newfolder = value
# def parse_smask(option, opt_str, value, parser):
# parser.values.command = 'set-mask'
# parser.values.mask = value
def parse_cycle(option, opt_str, value, parser):
parser.values.command = 'cycle'
parser.values.interval = value
def parse_msglevel(option, opt_str, value, parser):
parser.values.msg = value
# def parse_addfile(option, opt_str, value, parser):
# parser.values.command = 'addfile'
# parser.values.whichlist = value
# def parse_rmfile(option, opt_str, value, parser):
# parser.values.command = 'rmfile'
# parser.values.whichlist = value
parser = OptionParser(usage = "usage: %prog [options] command", version="%prog {0}" .format(__version__),
description = "Drews Script to the manage wallpapers using feh.")
parser.set_defaults(command=None, whichlist=None, direction=None, toggle=None, newfolder=None)
standard = OptionGroup(parser, "Standard Options")
metaopt = OptionGroup(parser, "Meta Info Options", "Further datails about the script startup useful for debugging")
gapod = OptionGroup(parser, "APOD Options", "Controls for the Astronomy Picture of the Day. ")
obmenu = OptionGroup(parser, "Openbox Menu", "Support for openbox xml menu generation. ")
#groupalt = OptionGroup(parser, "Alternative Wallpapers")
gplist = OptionGroup(parser, "List Support")
namecheck = OptionGroup(parser, "Filename Support")
direction = OptionGroup(parser, "Direction Commands")
## Standard Options
standard.add_option("-q", "--quiet",
action="store_true", dest="quiet", default=False, #help=SUPPRESS_HELP)
help="only display warnings and errors")
standard.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False, #help=SUPPRESS_HELP)
help="display all output")
standard.add_option("--debug",
action="store_true", dest="debug", default=False, #help=SUPPRESS_HELP)
help="debug mode: detailed output of commands")
standard.add_option("--really-quiet",
action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
#help="only display errors")
standard.add_option("--silent",
action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
#help="don't display any output")
standard.add_option('-t', "--test",
action="store_true", dest="test", default=False, #help=SUPPRESS_HELP)
help="test mode :: only print output")
standard.add_option("--test-mod",
action="store_const", const="testmod", dest="command", #help=SUPPRESS_HELP)
help="test mode :: use test function module")
standard.add_option("--test-none",
action="store_const", const="TestNone", dest="command", #help=SUPPRESS_HELP)
help="test mode :: no command specified")
parser.add_option("--info", '-i',
action="store_const", const="info", dest="command",
help="Displays information about the current wallpaper.")
parser.add_option("--last", '-l',
action="store_const", const="last", dest="command",
help="Sets the wallpaper as the last picture")
direction.add_option('-n', "--next",
action="store_const", const="next", dest="direction",
help="Sets the next wallpaper in the sequence")
direction.add_option('-p', "--prev", '--previous',
action="store_const", const="prev", dest="direction",
help="Sets the previous wallpaper in the sequence")
direction.add_option('-r', '--rand', "--random",
action="store_const", const="random", dest="direction",
help="Sets a random wallpaper from the sequence")
direction.add_option('-1', '--first', "--safe",
action="store_const", const="first", dest="direction",
help="Sets the first wallpaer in the sequence")
gplist.add_option('-d', "--default",
action="store_const", const="default", dest="whichlist",
help="Uses the wallpapers from the default file list")
gplist.add_option("--alt",
action="store_const", const="alt", dest="whichlist",
help="Uses the wallpapers from the alternative list")
parser.add_option("--change", '-c',
metavar="Folder[:Filter]", dest="newfolder",
help="Changes the wallpaper folder, optional filter.")
gapod.add_option('-a', "--apod",
action="store_const", const="apod", dest="command",
help="downloads and sets the wallpaper as todays APOD picture")
gapod.add_option("--apod-save",
action="store_const", const="apod-save", dest="command",
help="Saves todays APOD picture")
# gapod.add_option("--apod-last",
# action="store_const", const="apod-last", dest="command",
# help="Sets the wallpaper as yesterdays APOD picture")
# gapod.add_option("--apod-force",
# action="store_const", const="apod-force", dest="command",
# help="force the download of todays APOD picture")
gplist.add_option("--add-to-list",
action="store_const", const='rmfile', dest='toggle',
help="Adds the current wallpaper to the list.")
gplist.add_option("--remove-from-list",
action="store_const", const='addfile', dest='toggle',
help="Removes the current wallpaper from a list.")
gplist.add_option("--toggle-list", '--toggle',
action="store_const", const='toggle', dest='toggle',
help="Adds/Removes the current wallpaper from a list.")
gplist.add_option("--list",
metavar="LIST", dest='whichlist',
help="Sets which list to use.")
obmenu.add_option("--obmenu",
action="store_const", const="obmenu", dest="command",
help="Prints the standard openbox menu.")
obmenu.add_option("--obmenu-simple",
action="store_const", const="obmenu-simple", dest="command",
help="Prints the simple openbox menu.")
obmenu.add_option("--obmenu-alt",
action="store_const", const="obmenu-alt", dest="command", #help=SUPPRESS_HELP)
help="Prints the alternative openbox menu.")
namecheck.add_option("--name-check",
action="store_const", const="sane-name", dest="command",
help="Checks if wallpaper names are valid.")
namecheck.add_option("--name-path",
metavar="PATH", dest="sane_path", default=None,
help="Which folder to check.")
namecheck.add_option("--rename",
action="store_true", dest="sane_rename", default=False,
help="If to rename invalid files.")
metaopt.add_option("--meta-from",
metavar="Source", dest='meta_source', default=None,
help="Details from where the script was launched from")
parser.add_option_group(direction)
parser.add_option_group(gplist)
parser.add_option_group(gapod)
parser.add_option_group(obmenu)
#parser.add_option_group(standard)
#parser.add_option_group(metaopt)
#parser.add_option_group(namecheck)
(options, args) = parser.parse_args()
test = options.test
#debug = options.debug
#verbose = options.verbose
#quiet = options.quiet
## message level
if options.debug == True:
msg = 5
elif options.verbose == True:
msg = 4
elif options.quiet == True:
msg = 2
elif options.reallyquiet == True:
msg = 1
elif options.silent == True:
msg = 0
else:
msg = 3
#if options.command == None:
# try: # try and find a command
# command = args[0]
# except:
# pass
#else:
# command = options.command
command = options.command
if options.debug:
parser_options()
meta_info()
LockScript(Main, msg=msg) # start the script
else:
pass
apod.py
#!/usr/bin/python3
#Filename: apod.py
__version__ = '3.2.0'
import os, sys
from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
import shutil
from datetime import date
#print('loaded apod')
##### VARIABLES #####
## Files and Paths
#apod_archive_folder = '/home/wallpaper/apod_archive'
archive_folder = '/home/wallpaper/apod_archive'
save_folder = '/home/wallpaper/Space'
tmpdir = '/tmp/wallpaper/apod'
html_file = os.path.join(tmpdir, 'apod-html')
img_file = os.path.join(tmpdir, 'apod-img')
index_file = os.path.join(tmpdir, 'apod-index')
work = os.path.expanduser('~/.config/openbox/apod')
date_file = os.path.join(work, 'apod-date')
apodfile = os.path.join(work, 'apod')
apodlast = os.path.join(work, 'apod-last')
namefile = os.path.join(work, 'apod-names')
video_dir = os.path.join(work, 'apod-videos')
errs = os.path.join(work, 'archive-errors')
dtoday = str(date.today()) # todays date
thisyear = dtoday[:4]
saveprefix = 'APOD-'
## Defaults
def_test = False
def_msg = 3
def_command = None
def_apodset = True
def_archive_apod = True # Keep all APOD pictures
def_clear_apod = False
def_force_apod = False
def_cutoff = None
store_file_list = ''
##### LOCK v2 #####
## Lock v2
def LockScript(fun, lock='/tmp/apod.lock', msg=def_msg):
"""Locks the script before starting a function."""
from os import O_CREAT, O_EXCL
try: # lock the function
fd = os.open(lock, O_CREAT+O_EXCL)
#print('created lock file')
except OSError:
print('Already running function {0}...' .format(fun))
sys.exit(1)
try:
fun(msg)
finally:
try: # release lock
os.remove(lock)
except:
print('Error :: Lockfile missing !!!')
##### DEFINITIONS #####
def get_date(dfile=date_file):
check_file(dfile, create=True, msg=1)
f = open(dfile)
return f.read()
def check_dir(d, create=False, msg=def_msg):
"""Check if path exists."""
if not os.path.exists(d):
if msg > 3:
print('Error : folder missing...')
if create:
try:
os.makedirs(d)
if msg > 3 :
print('...created folder')
return True
except:
print('Fatal Error :: could not create directory {0}' .format(d))
sys.exit()
else:
return False
elif not os.path.isdir(d):
print('Fatal Error :: this is not a directory')
sys.exit()
else:
return True
def check_file(f, create=False, msg=def_msg):
"""Check if path exists."""
if not os.path.exists(f):
#if msg > 3:
# print('Error : file missing...')
if create:
check_dir(os.path.dirname(f), create=create, msg=msg)
if msg > 5:
print('creating file {0}' .format(f))
try:
q = open(f, 'w')
q.write('')
q.close()
return True
except:
if msg >= 1:
print('Fatal Error :: could not create file {0}' .format(f))
sys.exit()
else:
if msg >= 5:
print('file {0} does not exist' .format(f))
return False
else:
if msg >= 5:
print('file {0} exists' .format(f))
return True
def copy_file(ffrom, fto, msg=def_msg, test=def_test):
"""Copy files, from to (with test option)."""
if test:
print('[[copy command: {0} to {1}]]' .format(ffrom, fto))
else:
try:
shutil.copy(ffrom, fto)
except:
if not os.path.exists(ffrom):
print('Warning: error copying file, does not exist')
elif os.path.isdir(ffrom):
print('Fatal Error :: file being copied is a directory!')
sys.exit()
else:
print('Fatal Error :: UNKNOWN ERROR during copy')
sys.exit()
def download_files(hfile=html_file, ifile=img_file, datefile=date_file, msg=def_msg, test=def_test, apodset=def_apodset, day='today', archive_apod=def_archive_apod):
"""Download the APOD html and img."""
import urllib.request
import socket
timeout = 10
socket.setdefaulttimeout(timeout)
if day == 'today':
url = 'http://antwrp.gsfc.nasa.gov/apod/astropix.html'
name = dtoday
year = thisyear
else:
url = 'http://antwrp.gsfc.nasa.gov/apod/ap{0}.html' .format(day)
name = day
if day[:1] == '9' :
name = '19{0}-{1}-{2}' .format(day[:2], day[2:4], day[4:])
else:
name = '20{0}-{1}-{2}' .format(day[:2], day[2:4], day[4:])
year = name[:4]
try:
response = urllib.request.urlopen(url)
html = response.read()
if msg > 3:
print('downloaded html data for {0}' .format(day))
check_file(hfile, create=True, msg=msg)
f = open(hfile, 'wb')
f.write(html)
f.close()
except:
if msg >= 1:
print('ERROR :: page not found :: exiting.')
sys.exit(1)
if day == 'today':
t = open(datefile, 'w')
t.write(dtoday)
t.close()
if msg > 3:
print('updated date file with todays date')
if msg > 3:
print('copying over yesterdays APOD image')
copy_file(apodfile, apodlast, msg=msg, test=test)
found_img = False
with open(hfile, 'r', encoding='latin-1') as g:
for line in g:
if 'IMG SRC' in line:
i = line.split('"')
if msg > 4:
print('found image : {0}' .format(i[1]))
found_img = True
try:
img_responce = urllib.request.urlopen(os.path.join('http://antwrp.gsfc.nasa.gov/apod/', i[1]))
img_data = img_responce.read()
except:
print('error in img download')
check_dir(errs, create=True, msg=1)
check_file(os.path.join(errs, name), create=True, msg=0)
else:
if msg >= 5:
print('read img data')
check_file(ifile, create=True, msg=0)
if msg >= 5:
print('created img file')
with open(ifile, 'wb') as l:
l.write(img_data)
if msg >= 3:
print('downloaded image for {0}' .format(day))
if day == 'today':
copy_file(ifile,apodfile, msg=msg, test=test)
if archive_apod:
apod_archive(msg=msg, test=test, dfile=ifile, year=year, name=name)
if not found_img :
if msg >= 3:
print('video :: not found image line in file from {0}' .format(i))
check_file(os.path.join(video_dir, name), create=True, msg=0)
if day == 'today':
print('Warning : no image line in html file')
copy_file(apodlast,apodfile, msg=msg, test=test)
os.remove(hfile)
os.remove(ifile)
def apod_archive(dfile=img_file, msg=def_msg, test=def_test, year=thisyear, name=dtoday):
"""Archive APOD picture."""
arch_file = os.path.join(archive_folder, year, name)
check_dir(os.path.join(archive_folder, year), msg=msg, create=True)
if check_file(arch_file, create=False, msg=msg):
if msg > 3:
print('APOD picture already archived')
else:
if msg > 3:
print('Archiving APOD picture')
copy_file(dfile, arch_file, msg=msg, test=test)
def apod_save(day='current', sfolder=save_folder, msg=def_msg, test=def_test, prefix=saveprefix):
"""Save APOD picture as best of APOD."""
with open(os.path.expanduser('~/.fehbg'), 'r') as f:
a = f.read()
b = a[15:-1]
f.close()
if day == 'today' or b[-4:] == 'apod':
source = apodfile
sfile = prefix + dtoday
elif day == 'current':
if not (os.path.dirname(b) == archive_folder or os.path.dirname(os.path.dirname(b)) == archive_folder ):
print('picture is not in the recognised apod archive folder')
sys.exit()
source = b
sfile = prefix+ b[-10:]
else:
if msg >= 1:
print('unknown file specified')
sys.exit(1)
if msg > 3:
print('Saving APOD picture to Save folder')
copy_file(source, os.path.join(sfolder, sfile), msg=msg, test=test)
def set_apod(a=apodfile, msg=def_msg, test=def_test, apodset=def_apodset ):
"""Sets the APOD wallpaper."""
if not apodset:
if msg > 3:
print('Skipping setting APOD picture')
else:
if msg > 3:
print('Setting APOD picture')
if test:
print("exec :: feh --bg-scale {0}" .format(a))
else:
os.system("feh --bg-scale {0}" .format(a))
def clear_date(msg=def_msg, test=False):
"""Clears the date file."""
if msg > 3:
print('reseting date')
if not test:
t = open(datefile, 'w')
t.write('')
t.close()
##### APOD NAMES #####
def get_name(fname=None, names=namefile, msg=def_msg, rerun=True, prefix=saveprefix):
"""Returns the name of an APOD file."""
name_index = []
title_index = []
with open(names, 'r') as f:
for line in f:
i = line.split(',', 3)
name_index.append(i[0])
title_index.append(i[3])
if fname == None:
if msg >= 4:
print('getting todays date')
date = get_date()
elif fname.startswith(prefix):
if msg >= 4:
print('removing save prefix from name')
date = fname[len(prefix):]
else:
date = fname
try:
c = name_index.index(date)
return title_index[c][:-2]
except:
if rerun:
if msg >= 2:
print('Warning :: name not in index, recreating')
download_apod_index(msg=msg)
build_name_list(msg=msg)
get_name(fname=fname, names=names, msg=msg, rerun=False)
else:
if msg >= 1:
print('Error :: name not in index, please recreate')
def regen_index(msg=def_msg, cutoff=None):
download_apod_index(msg=msg)
build_name_list(msg=msg, cutoff=cutoff)
def file_status(date, msg=def_msg, cutoff=None):
"""Status of an APOD Picture."""
downloaded_files = [] # files in main apod download folder
archive_files = [] # files in sub folder
archive_download = [] # files from archive download
videolist = []
for i in os.listdir(archive_folder):
if os.path.isdir(os.path.join(archive_folder,i)):
for j in os.listdir(os.path.join(archive_folder, i)):
j1 = j[2:]
j2 = j1.replace('-','')
archive_files.append(j2)
else:
i1 = i[2:]
i2 = i1.replace('-','')
downloaded_files.append(i2)
for i in os.listdir(video_dir):
videolist.append(i)
if date[:1] == '9' :
tdate = '19{0}' .format(date)
else:
tdate = '20{0}' .format(date)
if cutoff == None:
cutoff = '1995' # apod started 1995 06 16
if tdate <= cutoff:
return 'cut-off'
try:
downloaded_files.index(date)
if msg >= 5:
print('picture has been downloaded')
return 'downloaded' #print('picture from {0} has already been downloaded' .format(pagedate))
except:
pass
try:
archive_files.index(date)
if msg >= 5:
print('picture has been downloaded')
return 'archived' #print('picture from {0} has already been downloaded' .format(pagedate))
except:
pass
try:
archive_download.index(date)
if msg >= 5:
print('picture has been downloaded by archive retrieval')
return 'retrieved'
except:
pass
try:
videolist.index(date)
if msg >= 5:
print('picture is a video')
return 'video file'
except:
if msg >= 5:
print('picture is missing')
return 'missing'
def download_apod_index(msg=def_msg, index=index_file):
"""Downloads the apod index file."""
import urllib.request
try:
response = urllib.request.urlopen('http://antwrp.gsfc.nasa.gov/apod/archivepix.html')
html = response.read()
if msg > 3:
print('downloaded apod index')
check_file(index, create=True, msg=msg)
f = open(index, 'wb')
f.write(html)
f.close()
except:
if msg >= 1:
print('Fatal Error :: index page not found')
sys.exit()
def build_name_list(msg=def_msg, index=index_file, names=namefile, cutoff=None):
"""Builds a name list."""
check_file(names, create=True, msg=msg)
data = []
with open(index, 'r') as f:
for line in f:
if '<a href="ap' in line:
i = line.split(':', 1)
imgdate = i[1][13:19]
imgname = i[1][26:-9]
status = file_status(date=imgdate, msg=msg, cutoff=None)
if imgdate[:1] == '9' :
imgfile = '19{0}-{1}-{2}' .format(imgdate[:2], imgdate[2:4], imgdate[4:])
else:
imgfile = '20{0}-{1}-{2}' .format(imgdate[:2], imgdate[2:4], imgdate[4:])
if msg >= 3:
print('found file : date = {0} : status = {1} : filename = {2}' .format(imgdate, status, imgfile))
data.append('{0},{1},{2},{3} \n' .format(imgfile, imgdate, status, imgname))
if msg >= 4:
print('finished parsing index file')
with open(namefile, 'w') as newf:
for j in data:
newf.writelines(j)
if msg >= 4:
print('written new name list')
##### MACROS #####
def download2(msg=def_msg, test=def_test, apodset=def_apodset, force_apod=def_force_apod, clear_apod=def_clear_apod, archive_apod=def_archive_apod):
"""Downloads and sets APOD picture."""
if clear_apod:
clear_date(msg=msg, test=test)
if force_apod:
if msg >= 3:
print('download forced')
if get_date() != dtoday or force_apod:
download_files(msg=msg, test=test, archive_apod=archive_apod)
else:
if msg >= 2:
print('apod has already been downloaded today')
set_apod(msg=msg, test=test, apodset=apodset) # #set apod picture
def archive_download(msg=def_msg, newindex=False, cutoff=None, test=def_test):
"""Search and download missing pictures from the APOD archive pages"""
if newindex:
regen_index(msg=msg, cutoff=cutoff)
target_dates = []
with open(namefile, 'r') as g:
for line in g:
i = line.split(',')
if i[2] == 'missing':
if file_status(date=i[1], msg=msg) == 'missing':
target_dates.append(i[1])
if msg >= 4:
print('target list built')
target_dates.sort()
for j in target_dates:
if msg >= 4:
print('')
download_files(msg=msg, test=test, day=j, archive_apod=True)
##### OPENBOX MENU #####
def gen_obmenu_standard():
import oblib
oblib.pipe_start()
oblib.item('APOD', 'apod.py --update')
oblib.item('APOD Save', 'apod.py --save')
oblib.item('APOD Force', 'apod.py --force')
oblib.pipe_end()
def obmenu_archive_folders(t='pipe'):
import oblib
years = []
for i in os.listdir(archive_folder):
if os.path.isdir(os.path.join(archive_folder,i)):
years.append(i)
years.sort()
years.reverse()
if t == 'pipe':
oblib.pipe_start()
else:
oblib.menu_start('Apod Archive')
for k in years:
oblib.item('Apod: {0}' .format(k), 'wallpaper.py --change {0}/{1}' .format(archive_folder, k))
if t == 'pipe':
oblib.pipe_end()
else:
oblib.menu_end()
##### TEST FUNCTIONS #####
def parser_options():
print('Options are: {0}' .format(options))
print('Args are : {0}' .format(args))
print('Command is : {0}' .format(options.command))
def meta_info():
if options.meta_source == None:
print('No source specifieed')
else:
print('Script launched from source :: {0}' .format(options.meta_source))
def test_module(msg=def_msg):
pass
#gen_obmenu_arfolders()
#unicode_test()
#apod_archive_download(msg=msg)
#print(check_list(args[0]))
#regen_index(msg=msg)
#print(get_name(fname=None, msg=msg))
#print(len(saveprefix))
##### MAIN FUNCTION #####
def Apod_Main(msg=def_msg):
"""Main functions."""
command = options.command
check_dir(work, create=True, msg=msg)
if options.regen_index :
regen_index(msg=msg, cutoff=options.cutoff)
if command == None:
command = 'pass'
if command == "download":
if msg > 3:
print('Updating APOD')
download2(msg=msg, test=options.test, apodset=options.apodset, force_apod=options.force, clear_apod=options.clear, archive_apod=options.archive)
elif command == "download-only":
if msg > 3:
print('Downloading APOD picture only')
download2(msg=msg, test=options.test, apodset=False, force_apod=options.force, clear_apod=options.clear, archive_apod=False)
elif command == "last":
if msg > 3:
print('Setting last APOD')
set_apod(apodlast, msg=msg, test=options.test, apodset=options.apodset)
elif command == "save-today":
apod_save('today', msg=msg, test=options.test)
elif command == "save":
apod_save('current', msg=msg, test=options.test)
elif command == "set":
if msg > 3:
print('Setting APOD')
set_apod(msg=msg, test=options.test, apodset=options.apodset)
elif command == "restore":
if msg > 3:
print('Restoreing yesterdays APOD picture.')
copy_file(apodlast, apodfile, msg=msg, test=options.test)
set_apod(msg=msg, test=options.test, apodset=options.apodset)
elif command == 'retrieve':
archive_download(msg=msg, newindex=options.newindex, cutoff=options.cutoff)
elif command == 'testmod':
test_module(msg=msg)
elif command == "TestNone":
print('Test mode null op[tion')
elif command == "pass":
if msg >= 4:
print('pass option has been called')
elif not command == None:
if msg >= 2:
print('Warning :: Unrecognised command specified')
#pass
else:
if msg >= 2:
print('Warning :: no commands found, using default option')
set_apod(msg=msg, test=options.test, apodset=options.apodset)
##### SCRIPT STARTUP #####
if __name__ == "__main__":
parser = OptionParser(usage = "usage: %prog [download options] [command]", version="%prog {0}" .format(__version__),
description = "Script to manage APOD wallpapers.")
parser.set_defaults(archive=def_archive_apod, apodset=def_apodset, command=None)
standard = OptionGroup(parser, "Standard Options")
doptions = OptionGroup(parser, "Download Options")
aoptions = OptionGroup(parser, "Archive Options")
metaopt = OptionGroup(parser, "Meta Info Options", "Further datails about the script startup useful for debugging")
standard.add_option("-q", "--quiet",
action="store_true", dest="quiet", default=False,
help="only display warnings and errors")
standard.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False,
help="display all output")
standard.add_option("--debug",
action="store_true", dest="debug", default=False,
help="debug mode: detailed output of commands")
standard.add_option("--really-quiet",
action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
#help="only display errors")
standard.add_option("--silent",
action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
#help="don't display any output")
standard.add_option('-t', "--test",
action="store_true", dest="test", default=False, help=SUPPRESS_HELP)
#help="test mode :: only print output")
standard.add_option("--test-mod",
action="store_const", const="testmod", dest="command", help=SUPPRESS_HELP)
#help="test mode :: use test function module")
standard.add_option("--test-none", "--pass",
action="store_const", const="TestNone", dest="command", help=SUPPRESS_HELP)
#help="test mode :: no command specified")
parser.add_option('-a', '-u', '--update',
action="store_const", const="download", dest="command",
help="Downloads and sets the wallpaper as todays APOD picture")
parser.add_option("--save",
action="store_const", const="save", dest="command",
help="Saves the curent APOD wallpaper")
parser.add_option("--set",
action="store_const", const="set", dest="command",
help="Sets wallpaper as APOD")
parser.add_option('--download-only',
action="store_const", const="download-only", dest="command",
help="Only downloads todays APOD picture")
parser.add_option("--last",
action="store_const", const="last", dest="command",
help="Sets the wallpaper as yesterdays APOD picture")
parser.add_option("--restore",
action="store_const", const="restore", dest="command", help=SUPPRESS_HELP)
#help="Restores yesterdays APOD picture as todays.")
aoptions.add_option("--retrieve", '--populate',
action="store_const", const="retrieve", dest="command",
help="Retrives archive APOD images from the APOD archive")
aoptions.add_option("--regen-index",
action="store_true", dest="regen_index", default=False,
help="Regenerates the APOD index file")
aoptions.add_option("--no-index",
action="store_false", dest="newindex", default=True, help=SUPPRESS_HELP)
#help="Do not build a nex index")
aoptions.add_option("--cut-off",
metavar="Date", dest='cutoff', default=def_cutoff,
help="Cut off date for downloading archive pictures")
# parser.add_option("--get-name",
# metavar="NAME", dest="getname", default=None,
# help="Returns the name of a pictures name")
doptions.add_option("--force",
action="store_true", dest="force", default=def_force_apod,
help="Force the download of todays APOD picture")
doptions.add_option("--clear",
action="store_true", dest="clear", default=def_clear_apod, help=SUPPRESS_HELP)
#help="resets the date of last APOD download.")
doptions.add_option("--archive",
action="store_true", dest="archive",
help="If to archive a picture after download")
doptions.add_option("--no-archive",
action="store_false", dest="archive",
help="If to archive a picture after download")
doptions.add_option("--force-set",
action="store_true", dest="apodset", help=SUPPRESS_HELP)
#help="If to set the wallpaper as APOD.")
doptions.add_option("--no-set",
action="store_false", dest="apodset", help=SUPPRESS_HELP)
#help="Skips setting APOD as wallpaper")
metaopt.add_option("--meta-from",
metavar="Source", dest='meta_source', default=None,
help="Details from where the script was launched from")
parser.add_option_group(doptions)
parser.add_option_group(aoptions)
parser.add_option_group(standard)
#parser.add_option_group(metaopt)
(options, args) = parser.parse_args()
## message level
if options.debug == True:
msg = 5
elif options.verbose == True:
msg = 4
elif options.quiet == True: # warnings
msg = 2
elif options.reallyquiet == True: # errors only
msg = 1
elif options.silent == True: # no output
msg = 0
else:
msg = 3
if options.debug:
parser_options()
meta_info()
LockScript(Apod_Main, msg=msg) -
Serious flaw with new "Package" feature?
How could this have been overlooked?
The Flaw: The new package feature doesn't consider linked images that are in opactiy masks. They are not copied to the new folder.
Can anyone else confirm this?
To test:
Create a new document.
Link unique image-1
Create a rectangle with a fill
Link unique image-2 into rectangle's opacity mask
Save file
Then choose Package, everything checked
When I do this, only 1 image is copied into the new links folder, image-1, while image-2 in the opacity mask is not copied and simply links to the original file/path.Thanks, just submitted the bug, shown below. Hope it's fixed soon, was looking forward to this feature.
Might also request a feature. I wish the "go-to-link" in the links window actually goes to linked files that are in opacity masks, selecting it, not just center over it and leav you guessing which shape the opacity mask it is in.
******BUG******
New "Package" feature in Illustrator for Creative Cloud users does not package linked images that are in opacity masks:
Steps to reproduce bug:
1. Create new document
2. Draw Rectangle and fill with color
3. Enter Rectangle's opacity mask
4. Place linked image (JPG, PSD) inside opacity the mask.
5. Exit opacity mask
6. Save file to desktop
7. Go to File > Package
8. Check everything, such as to copy links and create a links folder.
9. Save to new packaged folder
Results: New folder with only the AI file and text report. Report shows there are no linked images.
Expected results: New folder with AI file, Report file that mentions linked image, and a sub-folder named "links" containing the linked image in the document.
If the linked image is placed outside the rectangle's opacity mask, then Illustrator will copy the linked image to the new packaged folder. As is, this feature is broken. The first document I tried had 30+ linked images in opacity masks, none were packaged. -
I have had mixed success once I upgraded my MacBook Pro 17CoreDuo to Snow Leopard with my Canon MP620 in my office. In Leopard, it was set up as a wired LAN, with a cable running from my Airport Extreme Base Station to my printer. Scanning was nice and speedy.
All I can seem to do now is get it set up wirelessly, and the scanning is way too slow.
What is the proper way to set up a wired LAN with Airport Extreme?
I have gone so far as to get the printer on the same IP settings as my Mac.
Mac IP is 192.168.1.55 Printer IP is 192.168.1.70
Mac Subnet Mask is 255.255.255.0 Printer Subnet Mask is the same
Mac Router setting is 192.168.1.1 Printer Router Setting is the same
On the Printer, it is set to Wired LAN, and the wired LAN settings are all reading correctly.
I can print as long as I keep the USB connected to the printer. As soon as I try to remove it, it shows up as "offline".When you have the printer connected via wired or wireless, you will have to add another print queue. The USB queue is purely for connecting from the Mac to the printer via USB, so this is why it will show offline when the USB is disconnected.
To add the network printer on 10.6, you don't use More Printer > Canon IJ Printer menu like you did with 10.5. Instead, you need to select the Default browser view and wait. The printer will eventually appear in the Default view with the Kind column showing 'canonijnetwork'. Note that you will probably see the scanner appear very quickly, because it uses a different protocol to advertise itself on the network.
Note that the printer will only advertise itself on the network if the v10.26 driver is installed. The version 10.19 driver included with 10.6 does not work across the network. If you open the Options & Supplies button for the USB printer queue, it will show which version you are using under the General tab.
Note also, if you have the Parallels VM application installed, this can stop the network printer from appearing in the Default browser view.
HTH
Pahu -
Printing a graphic with a gradient mask in Flex 3-problem
Hello, I am fairly new to flex development. I am puting together a little program that allows the user to upload a picture add a vignette mask in order to achieve a soft edge, and have a problem I cannot find an answer anywhere, maybe someone could help me please.
I want to print a the user photo with a gradient mask or vignette from flex. I managed to show the image correctly on screeen with the gradient mask using this class but the output to paper is a rectangle without the soft mask.
//package to add the mask for display
package com.dm.graphics
import flash.display.Graphics;
import mx.containers.Canvas;
import flash.display.GradientType;
public class FrameBorderSoft extends Canvas
override protected function updateDisplayList(w:Number, h:Number):void
super.updateDisplayList(w,h);
var g:Graphics = this.graphics;
g.clear();
g.beginGradientFill(GradientType.RADIAL, [0x000000, 0x000000, 0x000000, 0x000000],
[1,1,0.8,0],
[1,128,195,255],
horizontalGradientMatrix(0,0,w,h) );
g.drawRect(0,0,w,h);
g.endFill();
It works beautifully until I try to print the graphic. The image prints but without the gradient edges (soft) instead it is just a sharp edge rectangle.
Does anyone know how to do this?
Here is my print function:
private function doPrint():void {
// Create an instance of the FlexPrintJob class.
var myPrintJob:FlexPrintJob = new FlexPrintJob();
// Start the print job.
if (myPrintJob.start() != true) return;
// Add the object to print. Do not scale it.
if (tabnavigator1.selectedChild == img1) {
//switchcolor is a variable to detect if the user changed the background to white or clear.
switchcolor = 100;
//printCF is the card front container with the photo masked
myPrintJob.addObject(printCF, FlexPrintJobScaleType.NONE);
myPrintJob.printAsBitmap = false;
} else if (tabnavigator1.selectedChild == img1b) {
switchcolor = 100;
myPrintJob.addObject(printCB, FlexPrintJobScaleType.NONE);
I hope this helps to visualize,
I would greatly appreciate any assistance or advise.Hello, back on my issue, i tested a little bit more the message dispaching.
I read the lazyLoadPolicy class and noticed that it always has to have a ModuleId property in the message to work, that's why the broadcast message didn't work to awake the module with the lazy loading policy.
So i added copy of my module:
<cairngorm:ParsleyModuleDescriptor objectId="test"
url="TestModule.swf"
applicationDomain="{ClassInfo.currentDomain}"
/>
<cairngorm:ParsleyModuleDescriptor objectId="testbis"
url="TestModuleBis.swf"
applicationDomain="{ClassInfo.currentDomain}"
/>
Set them both with a basicLoadPolicy, and tries to dispatch a message to only one of them using the ModuleId metatag. I then noticed that both modules received the message and not only the one i expected.
I then changed the ModuleMessageInterceptor configuration to dispatch to only one kind of module:
<cairngorm:ModuleMessageInterceptor type="{ OpenViewMessage }" moduleRef="test"/>
and this worked as expected. Only the first module catched the message. I am obiously messing with the ModuleId metatag but i cannot see what's wrong...
I compiled with
-keep-as3-metadata+=ModuleId
but this hasn't changed anything... -
Illustrator: Transparency/masked image printing issue
I edited an image in photoshop. The image was masked then set to grayscale in Photoshop and then "Placed" into Illustrator where I'm working in CMYK mode.
The background color in Illustrator is set to 0 0 0 100K. When I print the artwork, the masked area of the image (Which is transparent showing my background color) prints blacker than the backgound color of the whole artwork. When I went in with the eyedropper to read the CMYK value in masked area, it reads 75 68 67 90 where as it should read the background CMYK value 0 0 0 100K. This explains why it prints different intensity of blacks. I then went in to View -> Proof Colors to see what the printer should see, but the image looks perfectly fine there. So can anyone explain to me what I can do to fix this issue? Is this a known problem with Placing the image into an illustrator rather than opening it in illustrator, or it's only a printer issue?
Thanks in Advance.
Image attached in "Proof Color" ViewPreferences -> Appearance of Black.
Set those both to Accurately. I don't know why they default to rich blacks when that's not always what is used. I would think most users would perfer to see ACCURATE colors. -
How to show masked links in PDF when printing?
Hello
Ive got a PDF where some hyperlinks are masked behind certain words. For digital use of this document this is fine. However when printing I would like to have the full link to be printed (eg as a comment or on top of the word which contains the link). Is there a possibility to do this with Acrobat?
thanksHello there,
Thanks for posting. Unfortunately, I'm afraid you're in the wrong forum; this is the forum for questions specific to Acrobat.com (www.acrobat.com), and we are not able to help with questions about other Adobe products and services. If you're using Adobe Reader free software, I recommend posting to the Reader forum, where your questions is more likely to get a helpful response:
http://forums.adobe.com/community/adobe_reader_forums
Sorry not to be of more help! Good luck.
Best,
Rebecca -
How to display masked links in PDF when printing?
Hello
I have several PDF's which contain hyperlinks masked behind words. I would give readers of this document to print out the PDF. However, as the links are masked they wouldnt be able to use the document in print form. Is there any way to have these links shown when printing?
thanksHello there,
Thanks for posting. Unfortunately, I'm afraid you're in the wrong forum; this is the forum for questions specific to Acrobat.com (www.acrobat.com), and we are not able to help with questions about other Adobe products and services. If you're using Adobe Reader free software, I recommend posting to the Reader forum, where your questions is more likely to get a helpful response:
http://forums.adobe.com/community/adobe_reader_forums
Sorry not to be of more help! Good luck.
Best,
Rebecca -
Printing image with mask in Adobe Air
I have createad an application for framed photos.This application creates a Canvas which can hold several framed photos. Following is the code of the framed photo:
<mx:Canvas id="imageContainer" horizontalScrollPolicy="off" verticalScrollPolicy="off" clipContent="false">
<mx:Image id="image_img" source="app:/image.jpg" maintainAspectRatio="false" width="500" height="500" cacheAsBitmap="true"/>
<mx:Image id="mask_img" source="app:/mask.png" maintainAspectRatio="false" width="300" height="300" cacheAsBitmap="true"/>
<mx:Image id="frame_img" source="app:/frame.png" maintainAspectRatio="false" width="300" height="300" cacheAsBitmap="true"/>
</mx:Canvas>
when these are loaded, I use:
image_img.mask = mask_img;
to apply the mask on the image. this looks fine on the screen, but when I try to print it the mask is not applied!
Actually I have found two ways to do this. The first is to add the Canvas directly to a print job:
var printOption:PrintJobOptions = new PrintJobOptions();
printOption.printAsBitmap = true;
myPrintJob.addPage(frameContainer, null, printOption);
myPrintJob.send();
this has a very good print quality but the masks do not work.
the second way is to take a "screenshot" in a bitmap and print that:
var previewBD:BitmapData = new BitmapData( frameCanvas.width, frameCanvas.height, false );
previewBD.draw( frameCanvas, null, null, null, null, true );
var b:Bitmap = new Bitmap;
b.bitmapData = previewBD;
var s:Sprite = new Sprite;
s.addChild(b);
myPrintJob.addPage(s, null, printOption);
in this case the mask works but the print quality drops drastically!
is there any way to print with good quality AND having the mask?
is this a bug of AIR or am I missing something?here is the full code of the PhotoFrame file. (the mxml of which I sent in my first post)
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init( )"
horizontalScrollPolicy="off" verticalScrollPolicy="off" clipContent="false">
<mx:Script>
<![CDATA[
import mx.controls.*;
* Initialize
private function init( ) : void
image_img.mask = mask_img;
]]>
</mx:Script>
<mx:Canvas id="imageContainer" horizontalScrollPolicy="off" verticalScrollPolicy="off" clipContent="false">
<mx:Image id="image_img" source="app:/image.jpg" maintainAspectRatio="false" width="500" height="500" cacheAsBitmap="true"/>
<mx:Image id="mask_img" source="app:/mask.png" maintainAspectRatio="false" width="300" height="300" cacheAsBitmap="true"/>
<mx:Image id="frame_img" source="app:/frame.png" maintainAspectRatio="false" width="300" height="300" cacheAsBitmap="true"/>
</mx:Canvas>
</mx:Canvas>
and this is the full code of the main application file. in the printing I have commented out the bitmap printing part which has low quality.
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" showFlexChrome="false" visible="true"
applicationComplete="init( )"
horizontalScrollPolicy="off" verticalScrollPolicy="off"
usePreloader="false" >
<mx:Script>
<![CDATA[
import mx.controls.*;
private function init( ) : void
nativeWindow.maximize( );
var newFrame:PhotoFrame = new PhotoFrame( );
frameCanvas.addChild( newFrame );
private function printMe( ) : void
var myPrintJob:PrintJob = new flash.printing.PrintJob;
if(myPrintJob.start()) {
// Create the options
var printOption:PrintJobOptions = new PrintJobOptions();
printOption.printAsBitmap = true;
try {
// This has a mask but prints in low quality
/* var previewBD:BitmapData = new BitmapData( frameCanvas.width, frameCanvas.height, false );
previewBD.draw( frameCanvas, null, null, null, null, true );
var b:Bitmap = new Bitmap;
b.bitmapData = previewBD;
var s:Sprite = new Sprite;
s.addChild(b);
myPrintJob.addPage(s, null, printOption);
// This prints in desired quality but the mask does not work.
myPrintJob.addPage(frameCanvas, null, printOption);
catch(e:Error) {
Alert.show("Printing canceled");
myPrintJob.send();
]]>
</mx:Script>
<!--Frame Canvas-->
<mx:Canvas id="frameCanvas" width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" backgroundColor="#FFFFFF" backgroundAlpha="0.01" />
<mx:Button top="400" left="200" label="Print" click="printMe()"/>
</mx:WindowedApplication>
Note: I also tried printing the newFrame directly instead of the frameCanvas, but the mask is still missing.
finally I attach the three images used so that you can have the full project. -
Hi,
Iam using Date mask to print the date in 96/01/10 (year/month/Date),(CHINA) but iam getting 0.
This is the code i have written.
SET DATE MASK = 'YY/MM/DD'
,, ,,®UD-SWABZ(16)& ( i have to get the date from this field ).
Any one help.
Thanks,
DonaldHi,
you can take the help from this code :
<b>data : day(2), month(2), year(2).
data : date1(10).
data : date type sy-datum.
date = sy-datum.
day = date+6(2).
month = date+4(2).
year = date+2(2).
write: date.
concatenate year '/' month '/' day into date1.
write : date1.</b>
If it is helpful, please donot forget to reward the points.
Sandeep
Maybe you are looking for
-
Pages not responding, have to force quit
Whenever I try to open Pages or open a pages document I get the spinning ball and have to force quit. This has happened twice before (months ago) for short period of times and it has fixed itself but this problem has lasted over 48 hours and I cannot
-
Not liking iTunes right now!
Ok, I had some video's in my iTunes that didn't work. So I thought maybe if I go to the apple site and look in support, I'll find out how to get them to work. It told me to sync the video's. So I did. GREAT!!! Now all of my 487 songs are gone and non
-
Quick way of changing duration of multiple still images.
Hello I'm putting together a slideshow of 76 images. In the browser they have defaulted to 10 sec duration and I need to get it down to 2. Is there a way of changing them all in one go or do I need to go through and change each one individually? Many
-
Automatically send by email the result of a scheduled workbook Discoverer
Hi is their any way to send emails automatically from discoverer 4i, the results of the scheduled workbooks! if not in 4i whether it can be done in 9i? -Seetha
-
JS hack put in textfield paralyses my application.
Hi, I put <SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">window.open('Hack', 'Hack').focus();</SCRIPT> and the application response with 404 error in Firefox. It is due to bad database insert - it loads and interpret js and try to open bad wind